您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机简易带1/100秒的24小时制时钟 正文
简易带1/100秒的24小时制时钟

简易带1/100秒的24小时制时钟

点击数:7109 次   录入时间:03-04 11:41:11   整理:http://www.55dianzi.com   AVR单片机

程序已改动,已在实验板上测试通过。如下:
;******************************************************** 
;AVR汇编程序实例 简易带1/100秒的24小时制时钟
;简易带1/100秒的24小时制时钟
;MEGA16 4MHz 
;******************************************************** 
.include "m16def.inc"      ;引用器件I/O配置文件 

;定义程序中使用的变量名(在寄存器空间) 
.def count      =   r18   ;循环计数单元 
.def position      =   r19   ;LED显示位指针,取值为0-7 
.def p_temp       =   r20   ;LED显示位选,其值取反由PC口输出 
.def count_10ms   =   r21      ;10ms计数单元 
.def flag_2ms      =   r22   ;2ms到标志 
.def temp         =   r23   ;临时变量 
.def temp1      =   r24      ;临时变量 
.def int      =   r25   ;临时变量(中断中使用) 

;中断向量区定义,flash空间$0000-$0045 
.org $000
   rjmp reset      ;复位处理 
   nop
   reti         ;INT0 Handler 
   nop 
   reti         ;INT1 Handler 
   nop 
   reti         ;Timer2 Compare Handler 
   nop 
   reti         ;Timer2 Overflow Handler 
   nop 
   reti         ;Timer1 Capture Handler 
   nop 
   reti         ;Timer1 CompareA Handler 
   nop 
   reti         ;Timer1 CompareB Handler 
   nop 
   rjmp time1_ovf ;Timer1 Overflow Handler 
   nop
   reti         ;Timer0 Overflow Handler 
   nop 
   reti         ;SPI Transfer Complete Handler 
   nop 
   reti         ;USART RX Complete Handler 
   nop 
   reti         ;USART UDR Empty Handler 
   nop 
   reti         ;USART TX Complete Handler 
   nop 
   reti         ;ADC Conversion Complete Handler 
   nop 
   reti         ;E2PROM Ready Handler 
   nop 
   reti         ;Analog Comparator Handler 
   nop 
   reti         ;Two-wire Serial Interface Handler 
   nop 
   reti         ;INT2  Handler  
   nop 
   reti         ;Timer0 Comp  Handler  
   nop
   reti         ;SPM Ready Handler 
   nop      

;程序开始 
.org $02A 
reset:  
   ldi r16,high(RAMEND)      ;设置堆栈指针高位 
   out sph,r16 
   ldi r16,low(RAMEND)      ;设置堆栈指针低位 
   out spl,r16 
    
   ser temp          
   out ddra,temp            ;设置PORTA为输出,段码输出 
   out ddrc,temp            ;设置PORTC为输出,位码控制 
   out portc,temp         ;PORTC输出$FF, 无显示 

   ldi position,0x00         ;段位初始化为1/100秒低位 
   ldi p_temp,0x01         ;LED第1位亮 

;初始化时钟时间为11:59:55:00 
   ldi xl,low(time_buff)      ; 
   ldi xh,high(time_buff)      ;X寄存器取得时钟单元首指针 
   ldi temp,0x00 
   st  x+,temp            ;1/100秒 = 00 
   ldi temp,55 
   st  x+,temp            ;秒 = 55 
   ldi temp,59 
   st  x+,temp            ;分 = 59 
   ldi temp,11 
   st  x,temp            ;时 = 11 

   ldi temp,0xff           ;T1初始化,每隔2ms中断一次 
   out tcnt1h,temp 
   ldi temp,0x83
   out tcnt1l,temp 
   clr temp 
   out tCCr1a,temp 
   ldi temp,0x03            ;16M,64分频 2ms 
   out tccr1b,temp 
   ldi temp,0x04 
   out timsk,temp         ;允许T1溢出中断 
   sei                  ;全局中断允许 

;主程序 
main: 
   cpi flag_2ms,0x01         ;判2ms到否 
   brne main               ;No,转main循环 
   clr flag_2ms            ;到,请2ms标志 
   rcall display            ;调用LED显示时间(动态扫描显示一位) 
d_10ms_ok: 
   cpi count_10ms,0x05      ;判10ms到否 
   brne main               ;No,转main循环 
   clr count_10ms         ;10ms到,清零10ms计数器 
   rcall time_add         ;调用时间加10ms调整 
   rcall put_t2d            ;将新时间值放入显示缓冲单元 
   rjmp main               ;转main循环 

;LED动态扫描显示子程序,2ms执行一次,一次点亮一位,8位循环 

[1] [2] [3]  下一页


本文关键字:暂无联系方式AVR单片机单片机-工控设备 - AVR单片机

《简易带1/100秒的24小时制时钟》相关文章>>>