本帖最后由 芯圣电子官方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设置为推挽输出
}
三、程序执行结果
|