avr单片机实验-实验四.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验四、中断与定时/计数器应用 电气工程及其自动化2班 李钦豪 18号 源程序要求: 采用外部中断的方式对按键次数实现计数。计数值由一个数码管来显示,初值为0。每按键一次,计数值增1……计到F后,再按键一次则回0。画出电路图。(假设按键不抖动。选做:如采用查询的方式如何实现?注意按键一次不能多计数) 采用T/C0外部计数的方式实现上题要求。画出电路图 以下假设单片机芯片为ATmega8,振荡器频率为1MHz。 用T/C0溢出中断的方式实现定时,在一引脚产生周期为16ms的方波信号(即占空比50%)。画出电路图 同上题电路图。要求产生占空比为33.33%方波信号,其中高电平时长8ms,低电平时长16ms 以下各题只供有兴趣有时间的同学选做。单片机振荡器频率自定 编写十字路口交通信号灯程序。 (**增强功能:①可设置红、绿、黄灯亮的时间;②时间用两位数倒计时显示。画出电路图) 编写数字显示时钟程序,显示格式:HH.MM.SS。(采用T/C0溢出中断定时。**增强功:可设置时、分、秒等。电路图自行设计) 用定时器设计一运动秒表程序,显示到0.01s,格式为MM.SS.XX。该秒表设有一个按键(接引脚INT0),按一次,开始计时,时间显示实时更新;按第二次,停止计时,显示经过的时间;按第三次,计时显示清零,回到初始状态。 实验要求: 注意中断矢量(中断入口地址)的设置。 体会一般子程序与中断服务子程序的区别。 调试方法:设断点执行、执行到光标处。 观察窗口: I/O窗口、寄存器窗口、存储器窗口、处理器窗口。 建议用Proteus软件仿真,用实验板验证。 实验源程序及调试结果 1. 1.1 ;************************************ ; INT0外部中断计数 ;************************************ .includem8def.inc .org $000 rjmp reset .org $001 rjmp ex_int0 .org $013 ;七段码表 tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07 .db$7f,$6f,$77,$7c,$39,$5e,$79,$71 reset: ;设置堆栈指针 ldi r16,low(ramend) out spl,r16 ldi r16,high(ramend) out sph,r16 ;初始化端口b ldi r16,$ff out ddrb,r16 ldi r16,$3f out portb,r16;初始显示为0 ;中断初始化 cbi ddrd,2 sbi portd,2;pd2上拉电阻有效 ldi r16,$02 out mcucr,r16;int0下降沿产生中断请求 ldi r16,$40 out gicr,r16;外部中断0使能 clr r20;计数 sei;开全局中断 loop:rjmp loop;等待中断 ;中断子程序 ex_int0: in r1,sreg;保存sreg于r1 ldi zl,low(tab*2) ldi zh,high(tab*2) inc r20 cpi r20,16 brne plus clr r20 plus: add zl,r20 clr r16 adc zh,r16 lpm out portb,r0 out sreg,r1;恢复sreg reti 1.2 ;************************************ ; 查询端口计数 ;************************************ .includem8def.inc .org $000 rjmp reset .org $013 tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,$77,$7c,$39,$5e,$79,$71;七段码表 reset: ;设置堆栈指针 ldi r16,low(ramend) out spl,r16 ldi r16,high(ramend) out sph,r16 ;初始化端口b ldi r16,$ff out ddrb,r16 ldi r16,$3f out portb,r16;初始显示为0 ;中断初始化 cbi ddrd,2 sbi portd,2;pd2上拉电阻有效 clr r20;计数 ;查询pd2 loop: sbis pind,2;如果读到pd2为1,跳行执行 rcall change rjmp loop ;计数改变子程序 change: in r1,sreg;保存sreg于r1 ldi zl,low(tab*2) ldi zh,high(

您可能关注的文档

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档