完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
void Reset_Sources_Init()
{ WDTCN = 0xDE; WDTCN = 0xAD; } //============================================================================ // 系统时钟初始化,使用外部22.1184MHz晶振作为时钟源 void Oscillator_Init() { int i = 0; OSCXCN = 0x67; for (i = 0; i < 3000; i++); // Wait 1ms for initialization while(!(OSCXCN & 0x80)); OSCICN = 0x08; } //============================================================================ // I/O端口初始化 void PORT_IO_Init() { PRT0CF = 0x1B; //0001 1011 p0.0,p0.1,p0.3,p0.4为推挽方式;P0.2为漏极方式,其余皆为漏极方式 PRT1CF = 0x03; // 0000 0011 P1.0,P1.1为推挽方式,其余为漏极方式 XBR0 = 0x28; // 00 101 000 CEX0,CEX1,CEX2,CEX3,CEX4连接到5个端口引脚 XBR2 = 0x40; //交叉开关使能 P0 = 0x02; //0000 0010 p0.2 设置为高电平 P1 = 0x01; //p1.0 设置为高电平 } //============================================================================== // 定时器初始化 void Timer_Init() { TCON = 0x10; //定时器0允许 TMOD = 0x02; //定时器0方式2,8为自动重载 TL0 = 0x10; TH0 = 0x10; //输出频率30Hz TMR3CN = 0x04; TMR3RLH = 0x70; TMR3H = 0x70; //(65532-x)*12/22118400=T T=0.02 x=28672即TH=0x70 TL=0x00 } //============================================================================== // 中断初始化 void Interrupts_Init() { IE = 0x80; EIE2 = 0x01; } //============================================================================== //ADC初始化 void ADC_Init() { ADC0CN = 0x80; } void Voltage_Reference_Init() { REF0CN = 0x03; //使用内部参考电压基准 } //================================================================== // void PCA_Init() { PCA0CN = 0x40; //允许PCA0定时器/计数器 PCA0MD = 0x04; //定时器0溢出方式 /* PCA0CPM0 = 0x42; //8位PWM方式 PCA0CPM1 = 0x42; PCA0CPM2 = 0x42; PCA0CPH0 = 0x80; //占空比为50% PCA0CPH1 = 0x00; //占空比为100% PCA0CPH2 = 0x0C; //占空比为95% */ } //===================================================================== void Init_Device(void) { EA=0; Oscillator_Init(); Reset_Sources_Init(); ADC_Init(); Voltage_Reference_Init(); PORT_IO_Init(); Timer_Init(); PCA_Init(); Interrupts_Init(); } void main() { Init_Device(); delay(); PCA0CPM0 = 0x42; PCA0CPM3 = 0x42; PCA0CPM4 = 0x42; LED = 0; PCA0CPH0 = 0x00; PCA0CPH3 = 0x00; PCA0CPH4 = 0x00; // LED_State(0); delay1(); delay1(); LED = 1; PCA0CPH0 = 0xFF; PCA0CPH3 = 0xFF; PCA0CPH4 = 0xFF; // LED_State(1); EA = 1; …………………… 想问一下为什么我的程序老是卡在时钟初始化的 while(!(OSCXCN & 0x80)); 这一句,后面根本进不去? |
|
相关推荐
5个回答
|
|
我的程序编译都没有问题,就是程序下载后,运行老是跑到那里就停了,麻烦高手帮我看看,谢谢!
|
|
|
|
while(!(OSCXCN & 0x80));
while((OSCXCN & 0x80) == 0); 没有外部振荡器或者工作异常则停在这里等待正常,停在这里表示你外部振荡器没有良好工作 |
|
|
|
找到了,是晶振坏了,换了一个就可以了,谢谢!还有一个是void main()
{ Init_Device(); delay(); PCA0CPM0 = 0x42; PCA0CPM3 = 0x42; PCA0CPM4 = 0x42; 程序怎么跑到这里我的p0.3,p0.4就有输出高电平了,P0.0反而没有作用,始终输出的是高电平?(我的原意是最开始p0.0,p0.3,p0.4先输出高电平,延时后再输出低电平但是这里输出高电平后就控制不了了,求高手指点,谢谢!) |
|
|
|
|
|
|
|
已解决,谢谢
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12032 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 07:29 , Processed in 0.625309 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号