| 程序不是这样写的,既然用了定时器了,还用什么Delay500ms()?这样会占用cpu的资源。 |
| 兄嘚儿,我们买的同一款学习板 |
| 首先看看手册这个型号有没有定时器2。我之前用过一个stc的单片机居然没有定时器1。。。但是又定时器2你说坑不坑 |
|
问题解决了,开发板一直写入到C52芯片,没有写入STC15W408AS |
wulin 发表于 2020-1-5 15:56 谢谢大佬,把问题搞清楚了,开发板上我一直都在写入c52芯片里 |
| 有电路图吗 |
121212121212123 发表于 2020-1-5 11:47 任何程序都是在硬件基础上编写的。你这学习板没有接触过,不知其硬件结构。图中表明有两片不同型号单片机,STC89C52RC/STC15W408AS,LED与其连接关系不搞清怎么判断程序运行状态? |
wulin 发表于 2020-1-5 11:01 还是不行。。。所有灯都没亮 |
aking991 发表于 2020-1-5 09:00 这样???还是不行,所有灯都没亮 #include "reg52.h" sfr IE2 = 0xaf; //中断使能寄存器2 sfr AUXR = 0x8e; //辅助寄存器 sfr T2H = 0xD6; //定时器2高8位 sfr T2L = 0xD7; //定时器2低8位 sbit led1 = P1^7; sbit led2 = P1^6; sbit led3 = P1^5; sbit led4 = P1^4; unsigned char flag = 0; /*------------------------------------- 定时器2初始化,时钟12T、16位重载模式 --------------------------------------*/ void Timer2Init() //200微秒@11.0592MHz { AUXR &= 0xFB; //定时器时钟12T模式 T2L = 0x48; //设置定时初值 T2H = 0xFF; //设置定时初值 AUXR |= 0x10; //定时器2开始计时 IE2 |=0x04; //允许中断 EA=1; //开总中断 } /*------------------------------ 定时器2中断服务程序 -------------------------------*/ void timer2() interrupt 12 { flag = 1; led1 = ~led1; } void main(){ Timer2Init(); while(1){ if(flag == 1){ led2 = ~led2; } Delay500ms(); } } |
给你改一下,你试试。
|
| void Timer2Inter() interrupt 12{ //定时器2中断 led4 = ~led4; Delay500ms(); }这里面加了Delay500ms()这个当然有问题了,中断里作事时间越短越好,改用置标志位方式,然后要作的事情放在主函数里去作 |