本帖最后由 芯圣电子官方QQ 于 2023-7-24 15:05 编辑
测试下HC89S003P芯片GPIO出入测试,按键输入,LED指示灯输出,按键按下,指示灯亮。
一、手册GPIO相关寄存器
选择端口功能位输入,我选择带上拉输入(非施密特)
二、程序部分
- //main.c
- #define ALLOCATE_EXTERN
- #include "config.h"
- //系统初始化
- void SystemInit(void)
- {
- /************************************系统初始化****************************************/
- WDTCCR = 0x00; //关闭看门狗
- while((CLKCON&0x20)!=0x20); //等待内部高频RC起振
- CLKSWR = 0x51; //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
- while((CLKSWR&0xC0)!=0x40); //等待内部高频切换完成
- CLKDIV = 0x01; //Fosc1分频得到Fcpu,Fcpu=16MHz
- }
- void main(void)
- {
- uint i;
- SystemInit(); //系统初始化
- Init_Port(); //端口初始化
- //CCO_Init(); //CCO输出
-
- while(1)
- {
- if(P0_2==0)
- {
- P0_0=0;
- P1_1=0;
- }
- else
- {
- P0_0=1;
- P1_1=1;
- }
- }
- }
- //port.c
- #include "config.h"
- void Init_Port(void)
- {
- //P0xM[3:0]
- //0000 -- 输入(非施密特)
- //0001 -- 带下拉输入(非施密特)
- //0010 -- 带上拉输入(非施密特)
- //0011 -- 模拟输入
- //0100 -- 输入(施密特)
- //0101 -- 带下拉输入(施密特)
- //0110 -- 带上拉输入(施密特)
- //0111 -- 保留(模拟输入)
-
- //1x00 -- 推挽输出
- //1x01 -- 开漏输出
- //1x10 -- 开漏带上拉输出
-
-
- P0M0 = P0M0&0xF0|0x08; //P00设置为推挽输出
- P0M1 = P0M1&0xF0|0x02; //P02设置为带上拉输入(非施密特)
- P1M0 = P1M0&0x0F|0x80; //P11设置为推挽输出
- }
三、程序执行结果
|