c8051f040芯片初始化

FBIIIC 2019-09-10 03:28:30
#include <C8051F040.H>
sbit CEX0=P0^2; //CEX0-5 赋值给P0.2-P0.7
sbit CEX1=P0^3;
sbit CEX2=P0^4;
sbit CEX3=P0^5;
sbit CEX4=P0^6;
sbit CEX5=P0^7;
sbit TX0=P0^0; //TX0,RX0赋给P0.0,P0.1
sbit RX0=P0^1;
sbit INT0=P1^0; //INT0,INT1赋给P1.0,P1.1
sbit INT1=P1^1;
sbit led1=P6^5;
sbit led2=P6^4;
sbit led3=P6^3;
sbit led4=P6^1;
sbit led5=P6^2;
sbit led6=P6^0;
sbit led7=P6^6;

void SYSCLK_Init(void); //振荡器初始化
void Port_Init(void); //端口初始化
void Timer01_Init(void); //定时器0,1初始化
void Timer2_Init(void); //定时器2初始化
void Timer3_Init(void); //定时器3初始化
void Interrupt_Init(void); //中断开关初始化

void main()
{
WDTCN = 0xde;
WDTCN = 0xad;
SFRPAGE = CONFIG_PAGE;
SYSCLK_Init();

SFRPAGE = CONFIG_PAGE;
Port_Init();

SFRPAGE=TIMER01_PAGE;
Timer01_Init();

SFRPAGE=TMR2_PAGE;
Timer2_Init();

SFRPAGE=TMR3_PAGE;
Timer3_Init();

SFRPAGE=0x00;
Interrupt_Init();




while(1)
{
led1=1;
P5=0x00;

}


}

void SYSCLK_Init(void)
{
unsigned int n;
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
OSCXCN=0x67;
for (n=0;n<255;n++);
while ((OSCXCN & 0x80) == 0);
CLKSEL = 0x01;
SFRPAGE = SFRPAGE_SAVE;
}
void Port_Init(void)
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
XBR0=0x34;
XBR1=0x14;
XBR2=0x40;
XBR3=0x80;
P0MDOUT=0xff;
P1MDIN=0xff;
P1MDOUT=0x00;
P2MDIN=0xff;
P2MDOUT=0x00;
P3MDIN=0xff;
P3MDOUT=0x00;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
P4MDOUT=0x80;
P4=0xfe;
P5MDOUT=0x00;
P5=0xff;
P6MDOUT=0x00;
P6=0x00;
P7MDOUT=0X00;
P7=0xff;
SFRPAGE = SFRPAGE_SAVE;
}
void Timer01_Init(void)
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE=TIMER01_PAGE;
TCON=0x05;
TMOD=0x11;
TH0=0x00;
TL0=0x00;
TH1=0x4d;
TL1=0x6e;
CKCON=0x18;

SFRPAGE = SFRPAGE_SAVE;
}
void Timer2_Init(void)
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE=TMR2_PAGE;
SCON0=0x70;
SSTA0=0x05;
TMR2CN=0x00;
TMR2CF=0x08;
RCAP2L=0x98;
RCAP2H=0xff;
TMR2L=0x98;
TMR2H=0xff;
SFRPAGE = SFRPAGE_SAVE;
}
void Timer3_Init(void)
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE=TMR3_PAGE;
TMR3CN=0x00;
TMR3CF=0x00;
RCAP3L=0xfd;
RCAP3H=0x26;
TMR3L=0xfd;
TMR3H=0x26;
SFRPAGE = SFRPAGE_SAVE;
}
void Interrupt_Init(void)
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE=0x00;
IE=0x9f;
EIE1=0x00;
EIE2=0x21;
IP=0x00;
EIP2=0x20;
EIP1=0x00;
SFRPAGE = SFRPAGE_SAVE;
}



加了定时器初始化 端口赋值就不变了或者跟赋值的数不同是为什么?
...全文
341 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
FBIIIC 2019-09-12
  • 打赏
  • 举报
回复
void Timer1() interrupt 3
{
TH1=0x4d;
TL1=0x6e;
led1=1;
P5=0x00;
}

我现在用定时器1进中断点亮 但是没有反应,这是哪里的问题?
FBIIIC 2019-09-12
  • 打赏
  • 举报
回复
不好意思,是我忘记加分号了,可以了,感谢感谢
FBIIIC 2019-09-12
  • 打赏
  • 举报
回复
不行啊,SFRPAGE = 0x0F加在while里会报错,加在while前也会报错
zgl7903 2019-09-12
  • 打赏
  • 举报
回复
C8051F 系列单片机的 P4,P5,P6,P7 要先 SFRPAGE = 0x0F, 再访问
FBIIIC 2019-09-12
  • 打赏
  • 举报
回复
只写了初始化,发现端口不会变化
forget345 2019-09-11
  • 打赏
  • 举报
回复
定时器终端服务程序看看

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧