基于stc89c52rc单片机的路灯模拟控制系统设计内容摘要:

08 a8255 table[hour_zhi_2_c10] delay void display_1 b8255 0x01 a8255 table[1] delay void display_2 b8255 0x02 a8255 table[2] delay 六 声光报警子程序 程序清单如下 void baojing_1 if INT1 1 display_1 J8 0 光报警程序开始位置 delay_2 J8 1 delay_2 光报警程序结束位置 J3 1 声音报警指令 else if INT1 0 display keyscan keydown_if J8 0 J3 0 void baojing_2 if RXD 1 display_2 J8 0 光报警程序开始位置 delay_2 J8 1 delay_2 光报警程序结束位置 J3 1 声音报警指令 else if RXD 0 display keyscan keydown_if J8 0 J3 0 七 交通情况检测子程序 程序清单如下 void environment if TXD 1 J1 1 J2 1 display keyscan keydown_if else J1 0 J2 0 display keyscan keydown_if 八 路灯控制子程序设计 程序清单如下 void road_light_control if hour100minute hour_zhi_1100minute_zhi_1hour100minute hour_zhi_1_c100minute_zhi_1_c display keyscan keydown_if if hour100minute hour_zhi_2100minute_zhi_2hour100minute hour_zhi_2_c100minute_zhi_2_c display keyscan keydown_if else if hour100minute hour_zong100minute_zonghour100minute hour_zong_c100minute_zong_c display keyscan keydown_if 九 看门狗技术 PC 受到干扰而失控引起程序乱飞也可能使程序陷入死循环 [6]指令技术软件陷阱技术不能使失控的程序摆脱死循环的困境这时系统完全瘫痪如果操作者在场就可以按下人工复位安钮强制系统复位但操作者不能一直监视着系统也往往是在引起不良后果之后才进行人工复位为使程序脱离死循环通常采用看门狗技术看门狗技术就是不断监视程序 循环运行时间若发现时间超过已知的循环设定时间则认为系统陷入了死循环然后强迫程序返回到 0000H入口在 0000H处安排一段出错处理程序使系统运行纳入正规 看门狗技术可由硬件实现可由软件实现也可由两者结合实现本系统采用硬件看门狗电路 实现硬件看门狗电路方案较多目前采用较多的方案有以下几种 采用微处理器监控器 采用单稳态电路来实现看门狗单稳定电路可采用 74LS123 采用内带震荡器的记数芯片 本设计采用第三种方案实现看门狗电路下面就对该方案作以介绍 1 基本原理 CD4060 是带震荡器的 14 位计数器由该芯片构 成的看门狗电路如图 42 看门狗电路图所示 4060 记数频率由 RT 和 CT 决定设实际的程序所需工作周期为 T 分频器记满时间为 T 当 T T 且系统正常工作时程序每隔 T 对 4060 进行扫描一次分频且永无记满输出信号如系统工作不正常如程序跑飞死循环等程序对 4060 发不出扫描信号分频器记满输出一脉冲号使 CPU 复位 2 参数选择 4060 的振荡频率 f 由 RT CT 决定 Rs 用于改善振荡器的稳定性 Rs 要大于 RT一般取 Rs 10RT 且 RT 1kΩ CT≥ 100pF 如果 Rs 450Ω RT 45Ω CT 1uF 则 f 10HZ4060的振荡 频率和 Qi i 678910121314 的选择要根据情况确定 3 几个原则 看门狗电路必须由硬件逻辑组成不宜由可编程计数器充当因为 CPU 失控后可能会修改可编程器件参数使看门狗失效 4060 的 RST 线上阻容组成的微分电路很重要因为扫描输入信号是 CPU 产生的正脉冲若此信号变 1 后由于干扰程序乱飞微分电路只能让上跳沿通过不会封死 4060 看门狗仍能计数起作用若没有微分电路扫描输入信号上的 1 状态封死4060 使之不能记数看门狗不起作用 图 42 看门狗电路图 CPU 必须在正确完成所有工作后才能发扫描输入信号且程序中发扫描 信号的地方不能太多否则正好在哪里有死循环看门狗就不产生记满输出信号不能重新启动 CPU 4060的记满输出信号不但要接到 MCS51 的 RST脚而且还应接到其它芯片的RST 脚因为程序乱飞后其它具有 RST 脚的芯片也混乱了必须全部复位 图 10 参考文献 《信号与系统》 ALAN VOPPENHEIM 著西安西安交通大学出版社 1997 年 《数字图像处理学》元秋奇著北京电子工业出版社 2020 年 《模拟电子线路基础》吴运昌著广州华南理工大学出版社 2020 年 《数字电子技术基础》阎石著北京高等教育出版社 1997 年 《数据结构 与算法》张晓丽等著北京机械工业出版社 2020 年 《 ARMLinux 嵌入式系统教程》马忠梅等著北京北京航空航天大学出版社2020 年 《单片机原理及应用》李建忠著西安西安电子科技大学 2020 年 附录 附 1 元器件明细表 D8255AC STC89C52 DAC0832 ADC0809 74LS245 附 2 仪器设备清单 数字示波器 数字万用表 信号发生器 稳压电源 附 3 电路图图纸 附 4 程序清单 此程序是路灯模拟系统 include include STC 应包含的头文件 include 以下是对 p1 口的位寻址定义 sbit DIR P20 sbit J1 P10 sbit J2 P11 sbit J3 P12 sbit J4 P13 sbit J5 P14 sbit J6 P15 sbit J7 P16 sbit J8 P17 以下是对 8255 的端口地址的宏定义 define a8255 XBYTE[0X0FF7C] define b8255 XBYTE[0X0FF7D] define c8255 XBYTE[0X0FF7E] define con8255 XBYTE[0X0FF7F] define uchar unsigned char Unsignedcharcode table[] 0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf60xee0x3e0x9c0x7a0x9e0x8e 此为自己做的板子上的数码管显示编码 以下是对时分秒变量的声明 int scount 0 这是中断次数的计数寄存器 unsigned int second 0 unsigned int minute 0 unsigned int hour 0 unsigned int hour_zong 7 unsigned int hour_zong_c 10 unsigned int minute_zong 0 unsigned int minute_zong_c 0 unsigned int hour_zhi_1 13 unsigned int hour_zhi_1_c 16 unsigned int minute_zhi_1 0 unsigned int minute_zhi_1_c 0 unsigned int hour_zhi_2 20 unsigned int hour_zhi_2_c 22 unsigned int minute_zhi_2 0 unsigned char minute_zhi_2_c 0 unsigned int zong unsigned int zong_k unsigned int zong_c unsigned int zhi_2 unsigned int zhi_2_k unsigned char zhi_2_c unsigned int zhi_1 unsigned int zhi_1_k unsigned int zhi_1_c 以下是按键复用的变量的声明 unsigned char x 0 unsigned char y 0 unsigned char z 0 按键扫描部分 判断哪一个按键被按下 unsigned char temptemp1temp2 unsigned char key 0 unsigned char key_down 0 unsigned char key2 0 unsigned char abk 以下是一段大约 6ms 的延时 void delay uchar ijk for i 1i 0i for j 2j 0j for k 200k 0k 以下是一段大约防抖的延时 void delay_1 uchar def for d 10d 0d for e 10e 0e for f 200f 0f 以下是声光报警部分的延时程序 void delay_2 uchar iijjkk for ii 2ii 0ii for jj 50jj 0jj for kk 100kk 0kk 以下是 8255 的初始化 void init8255 con8255 0x80 c8255 0xffcolse light 以下是定时器 0 的初始化 void timer0_init TMOD 0X01 TH0 6553650000 256 TL0 6553650000 256 EA 1 TR0 1 ET0 1 关闭定时器 0 void close_timer EA 0 ET0 0 TR0 0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。