【STC单片机】STC15主时钟对外输出示例程序及演示

127 篇文章 326 订阅 ¥9.90 ¥99.00

【STC单片机】STC15主时钟对外输出示例程序及演示


对外输出不同时钟频率

  • 对外输出8MHz,引脚P54
    在这里插入图片描述
  • 对外输出4MHz,引脚P54
    在这里插入图片描述
  • 对外输出16MHz,引脚P54

虽然可以看到16MHz的波形,但是在示波器显示上,是闪烁的,说明不是很稳定,STC15F型号的,为5V供电的,最大支持对外输出是13.5MHz。

在这里插入图片描述

STC15主时钟对外

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是STC单片机电子时钟的汇编程序示例: ``` ;*************************************************** ;STC单片机电子时钟汇编程序 ;*************************************************** ; 定义常量 YearAdd EQU 20H ; 年份加数,例如2020年就是20H MonthAdd EQU 21H ; 月份加数 DayAdd EQU 22H ; 日子加数 HourAdd EQU 23H ; 小时加数 MinAdd EQU 24H ; 分钟加数 SecAdd EQU 25H ; 秒数加数 ; 定义变量 Year DB 0 ; 年份 Month DB 0 ; 月份 Day DB 0 ; 日子 Hour DB 0 ; 小时 Min DB 0 ; 分钟 Sec DB 0 ; 秒数 ; 定义常量和变量的初始值 ORG 0 ; 程序从地址0开始执行 LJMP Main ; 跳转到程序 ; 中断服务程序 ISR: PUSH ACC ; 保存中断前的ACC值 PUSH PSW ; 保存中断前的PSW值 MOV IE, #00H ; 禁止中断 CLR TR0 ; 停止计时器0 DJNZ TH0, Exit ; 如果TH0不为0,则退出中断服务程序 DJNZ TL0, Exit ; 如果TL0不为0,则退出中断服务程序 MOV TH0, #0FFH ; 重新设置TH0 MOV TL0, #0FFH ; 重新设置TL0 INC Sec ; 秒数加1 MOV A, Sec ; 把秒数放入累加器A中 CJNE A, #60, Skip ; 如果秒数不等于60,则跳转到Skip标号处 CLR Sec ; 秒数清零 INC Min ; 分钟加1 Skip: MOV A, Min ; 把分钟放入累加器A中 CJNE A, #60, Skip1 ; 如果分钟不等于60,则跳转到Skip1标号处 CLR Min ; 分钟清零 INC Hour ; 小时加1 Skip1: MOV A, Hour ; 把小时放入累加器A中 CJNE A, #24, Skip2 ; 如果小时不等于24,则跳转到Skip2标号处 CLR Hour ; 小时清零 INC Day ; 日子加1 Skip2: MOV A, Day ; 把日子放入累加器A中 CJNE A, #32, Skip3 ; 如果日子不等于32,则跳转到Skip3标号处 CLR Day ; 日子清零 INC Month ; 月份加1 Skip3: MOV A, Month ; 把月份放入累加器A中 CJNE A, #13, Exit ; 如果月份不等于13,则退出中断服务程序 CLR Month ; 月份清零 INC Year ; 年份加1 Exit: MOV TH0, #0FFH ; 重新设置TH0 MOV TL0, #0FFH ; 重新设置TL0 SETB TR0 ; 启动计时器0 POP PSW ; 恢复中断前的PSW值 POP ACC ; 恢复中断前的ACC值 RETI ; 从中断返回 ; 程序 Main: MOV P0, #0FFH ; P0口输出高电平 MOV P1, #0FFH ; P1口输出高电平 MOV P2, #0FFH ; P2口输出高电平 MOV P3, #0FFH ; P3口输出高电平 MOV TMOD, #01H ; 设置计时器0为模式1 MOV TH0, #0FFH ; 设置计时器0的初值 MOV TL0, #0FFH ; 设置计时器0的初值 SETB ET0 ; 允许计时器0中断 SETB EA ; 开启总中断 MOV A, #YearAdd ; 把年份加数放入累加器A中 ADD A, #2020 ; 加上2020年 MOV Year, A ; 把结果放入Year变量中 MOV A, #MonthAdd ; 把月份加数放入累加器A中 ADD A, #10 ; 加上10月份 MOV Month, A ; 把结果放入Month变量中 MOV A, #DayAdd ; 把日子加数放入累加器A中 ADD A, #7 ; 加上7日子 MOV Day, A ; 把结果放入Day变量中 MOV A, #HourAdd ; 把小时加数放入累加器A中 ADD A, #8 ; 加上8小时 MOV Hour, A ; 把结果放入Hour变量中 MOV A, #MinAdd ; 把分钟加数放入累加器A中 ADD A, #30 ; 加上30分钟 MOV Min, A ; 把结果放入Min变量中 MOV A, #SecAdd ; 把秒数加数放入累加器A中 ADD A, #50 ; 加上50秒数 MOV Sec, A ; 把结果放入Sec变量中 Loop: SJMP Loop ; 进入死循环 ``` 该程序使用STC单片机的计时器0来实现电子时钟的功能。在中断服务程序中,每当计时器0计时到0时,就会触发中断,然后将秒数加1,如果秒数达到60,则将秒数清零,将分钟加1,以此类推。在程序中,将初始时间的年份、月份、日子、小时、分钟、秒数分别存储在常量和变量中,并且启动计时器0和总中断,然后进入死循环。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值