您的位置:首页版主原创AVR示例程序
内容搜索: 标题内容作者
     
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

基于AVR单片机的电子钟与LED广告灯程序(已调试OK)

[日期:2008-01-12 ] [来源:东哥开发网(www.picavr.com) 作者:东哥] [字体: (投递新闻)

;;**** APPLICATION NOTE AVR ICE200 *******************************************
;* Title: FOR ADJUST TEST PCB.
;* Version:         1.0
;* Last Updated:    
;* MCU:             AT90S8515
;* AUTHOR:          东哥单片机学习网( www.picavr.com )
;* DESCRIPTION:     基于AT90S8515的LED闪光与电子钟显示程序
;****************************************************************************
;****************************
; CONTANCE NUMBER DEFINATION
;****************************
.EQU     FCLK       =4000         ;SYSTEM CLOCK FREQ.=4MHz
;*************************
;PORT A PINS;
;*************************
.EQU      A0       =0         ;
.EQU      A1       =1         ; 
.EQU      A2       =2         ; 
.EQU      A3       =3         ; 
.EQU      A4       =4         ; 
.EQU      A5       =5         ; 
.EQU      A6       =6         ; 
.EQU      A7       =7         ; 
;*************************
;Port B pins; KEY CONTROL
;*************************
.EQU      START     =7        ;START KEY
.EQU      RS        =1        ;LCD MODULE’S RS PIN
.EQU      RW        =2        ;LCD MODULE’S RW PIN
.EQU      ELCD      =3        ;LCD MODULE’S E PIN
;*************************
;Port C pins; 
;*************************
.EQU      APIN      =0        ;       
.EQU      BPIN      =1        ;
.EQU      STROBE    =4        ; 
.EQU      BUSY      =5        ; 
.EQU      OVRNG     =6        ; 
.EQU      D5        =7        ; 
;*************************
;Port D pins; 
;*************************
.EQU      CP1       =0        ; 
.EQU      DA1       =1        ; 
.EQU      D7        =7        ;
.EQU      D6        =6        ;
;*************************
;SREG(状态寄存器)
;*************************
.EQU      C         =0        ;
;.EQU     Z         =1        ;
.EQU      N         =2        ;
.EQU      V         =3        ;
.EQU      S         =4        ;
.EQU      H         =5        ;
.EQU      T         =6        ;
.EQU      I         =7        ;
;*************************

.INCLUDE "8515DEF.INC"
;*********************************************
; DEFINE VARIAVLE
; R0: USED BY "LPM" INSTRUCTION
; R26--R31=X/Y/Z: LOOK AS COMMON REGISTER
;*********************************************
          .DEF  FLAG   =R19;
          .DEF  ADH    =R20;
          .DEF  ADM    =R21;
          .DEF  ADL    =R22;
          .DEF  DLREG  =R23;USED IN DELAY SUBROUTE
          .DEF  COMRL  =R24;COMMON REGISTER,LOW BYTE, ABLE TO USE "ADIW"
          .DEF  COMRH  =R25;COMMON REGISTER,HIGH BYTE
;--------------------------------------
          .DSEG
          .ORG  0X60
CNTER:    .BYTE 1        ; 
TEMP:     .BYTE 7        ;
MIN:      .BYTE 1        ;
SECC:     .BYTE 1        ;
COUNT:    .BYTE 1        ;
COUNT_BUF: .BYTE 1       ;
;*******************************
; DEFINE BIT FLAG
;*******************************
.EQU      DISPB    =0   ;
.EQU      B_Y      =1   ;
.EQU      B_TOU    =2   ;
;*****************************************************
; EEPROM segment
; DEFAULT ANGLE: SEL1=2--9, SEL2=10--18, SEL3=20--29
;*****************************************************
          .ESEG                 
          .ORG 0X05
DATA1:    .DW  0XAA55  
;****Source code**********************************************
          .CSEG                 ;CODE segment
          .ORG 0X000
          RJMP RESET            ;Reset handler(外部复位,上电复位及看门狗溢出复位)
          RJMP INTT0            ;INT0 HANDLER(外部中断请求0)
          RETI                  ;INT1 HANDLER(外部中断请求1)
          RETI                  ;TIMER1 CAPTURE(定时/计数器1捕捉事件)
          RETI                  ;T1 COMPAROR A(定时/计数器1比较A匹配)
          RETI                  ;T1 COMPAROR B(定时/计数器1比较B匹配)
          RETI                  ;T1 OVERFLOW(定时/计数器1溢出)
          RJMP TIMER0           ;T0 OVERFLOW(定时/计数器0溢出)
          RETI                  ;SPI HANDLER(SPI串行传送完成)
          RETI                  ;UART.RX COMPLETE HANDLER(UART接收完成)
          RETI                  ;UART.UDRE HANDLER(UART数据寄存器空)
          RETI                  ;UART.TX COMPLETE HANDLER(UART发送完成)
          RETI                  ;ANALOG COMPAROR HANDLER(模拟比较器)
;*** Reset handler *******************************************
RESET:    LDI   XL,    HIGH(RAMEND)  ; SET SP VALUE
          OUT   SPH,   XL            ;
          LDI   XL,    LOW(RAMEND)   ;
          OUT   SPL,   XL            ;
;---------------------------------------------

INITIO:   CLR  XL                    ; 
          OUT  SREG,  XL             ;(状态寄存器),禁止总中断开放位  

          LDI  XL,   0B01000000      ;开放INT0外部中断,禁止INT1外部中断                                                                                                                                                                                                                                                                                                  
          OUT  GIMSK, XL             ;(通用中断屏蔽寄存器GIMSK)

          LDI  XL,   0B00000010      ;INT0下降沿产生中断
          OUT  MCUCR, XL             ;(通用控制寄存器MCU)     
                             
          LDI  XL,   0B00001111      ;开放WDT WDE置1开放看门狗,溢出时间为1.9S 
          OUT  WDTCR, XL             ;

          CLR  XL                    ; SET SPI CONTROL
          OUT  SPIE,  XL             ;()
          OUT  SPSR,  XL             ;(SPI控制寄存器)
          OUT  UCR,   XL             ;(UART控制寄存器) SET UART CONTROL

          LDI  XL,   0B10000000      ; SET ANALOG COMPAROR CONTROL
          OUT  ACSR,  XL             ;(模拟比较器控制和状态寄存器ACSR)
;--------------------------------------------
          LDI  XL,    0B11111111     ;PORTA IS OUTPUT-PORT
          OUT  DDRA,  XL             ;
          OUT  PORTA, XL             ;
;-------------------------------------------
          LDI  XL,    0B00011111     ;PC7--PC4: INPUT,Hi-Z,  PC3--PC0:OUTPUT
          OUT  DDRC,  XL             ;
          LDI  XL,    0B11111111     ;
          OUT  PORTC, XL             ;
;-------------------------------------------
          LDI  XL,    $FE            ;PORTB0 IS INPUT-PORT
          OUT  DDRB,  XL             ;PORTB0 Hi-Z
          CLR  XL                    ;
          OUT  PORTB, XL             ;
;-------------------------------------------
          LDI  XL,    0B11111011     ;PD2=输入,PD0-PD1,PD3-PD7=输出
          OUT  DDRD,  XL             ;
          LDI  XL,    $FF            ;PORTD=FFH
          OUT  PORTD, XL             ;
;--------------------------------------------
          LDI  XL,    0B00000000     ;DISABLE T1 INTERRUPT,ENABLE T0 INTERRUPT
          OUT  TIMSK, XL             ;(定时/计数器中断屏蔽寄存器TIMSK)

          LDI  XL,    0X02           ;T0 INPUT FREQ=FCLK 产生中断的时间={1/(4M/8)}                                              ;*100=200uS TCNT0初值为06
          OUT  TCCR0, XL             ;(定时器0控制寄存器)

          CLR  XL                    ;
          OUT  TCCR1A,XL             ;(定时器1控制寄存器A)

          LDI  XL,   0B10000101      ;T1 INPUT FREQ=FCLK/1024
          OUT  TCCR1B,XL             ;(定时器1控制寄存器B)
;-------------------------------------------
                                     ;
INITRAM:  CLR  XL                    ;INITILIZE RAM,60H--25FH
          CLR  YH                    ;ALL CLEAR 0
          LDI  YL,   0X60            ;
INITRAM1: WDR                        ;RESET WATCHDOG
          ST   Y+,   XL              ;
          CPI  YH,   HIGH(RAMEND)    ;清0程序
          BRNE INITRAM1              ;
          CPI  YL,   LOW(RAMEND)     ;
          BRNE INITRAM1              ;
;-------------------------------------------
;          SEI                        ;开放总中断
;------------------------------------------
      LDI   XL,156               ;200uS
          OUT   TCNT0,XL             ;
          CLR   R16                  ;
      CLR   FLAG                 ;
      LDI   R18,$FF              ;
;---------------------------------------
;**************************************



;**************************************
; MAIN PROGRAM PROCESS
;**************************************
MAIN:     
          WDR      
      RCALL  KEY                 ;
;      RCALL  DISPLAY             ;   
          RCALL  LEDDISP             ;   
          RJMP   MAIN                ;
;***************************************


;***************************************
DISP:
     SBI    PORTD,D7             ;
         RCALL  WAITE_164            ;
         CBI    PORTD,D7             ;
     RCALL  DEL2                 ;
     SBI    PORTD,D7             ;
     RET                         ; 
;***************************************
WAITE_164:
         LDI    R16,$08              ;
     MOV    R17,R18              ;
WLOOP:
         CBI    PORTD,CP1            ;
         ROL    R17                  ;
         BRCS   W_1                  ;
     CBI    PORTD,DA1            ;
     RJMP   W_0                  ;

W_1:     SBI    PORTD,DA1            ;

W_0:     SBI    PORTD,CP1            ;
         DEC    R16                  ;
     BRNE   WLOOP                ;
     RET                         ;         
;*****************************************
;INT0中断子程序
;----------------------------------------
INTT0:
          PUSH  XL                   ;
          IN    XL,SREG      
      PUSH  XL                   ;
;----------------------------------------
          CLI                        ;关放总中断
;         LDI   XL,    0B00000000    ;DISABLE T1 INTERRUPT,ENABLE T0 INTERRUPT
;         OUT   TIMSK, XL            ;(定时/计数器中断屏蔽寄存器TIMSK)
;---------------------------------------
      CLR   XL                   ;
          OUT   GIFR,XL              ;清INTF0中断标志位
      OUT   TIFR,XL              ;清TMR0中断标志位

      LDI   XL,156               ;200uS
      OUT   TCNT0,XL             ;

      CBI   PORTC,0              ;
;----------------------------------------

          CPI   R18,70               ;
          BRSH  INT0END              ;
;         BRCC  INT0END              ;
      CBI   PORTC,3              ;

          CPI   R18,60               ;
      BRLO  INT0END              ;
;         BRCS  INT0END              ;

      CBI   PORTC,2              ;
;----------------------------------------
INT0END:  
          SEI                        ;开放总中断       
;         LDI   XL,    0B00000010    ;DISABLE T1 INTERRUPT,ENABLE T0 INTERRUPT
;         OUT   TIMSK, XL            ;(定时/计数器中断屏蔽寄存器TIMSK)

          CLR   R18                  ;                   

          POP   XL                   ;
          OUT   SREG,XL              ;
          POP   XL                   ;
      RETI                       ;
;*****************************************


;*****************************************
;TMR0中断入口程序
;*****************************************
TIMER0: 
         PUSH  XL           ;
         IN    XL,SREG      
     PUSH  XL           ;
;---------------------------------
;     LDI   XL,156       ;200uS
;     OUT   TCNT0,XL     ;

         INC   R18          ;

;        INC   ADL          ;
;     CPI   ADL,50       ;
;        BRNE  TMREND       ;
;     CLR   ADL          ;
;----------------------------------
;        INC   ADM          ;
;     CPI   ADM,100      ;
;        BRNE  TMREND       ;
;     CLR   ADM          ;
;---------------------------------
;        LDI   XL,$01       ;
;        EOR   FLAG,XL      ;
;     OUT   PORTC,FLAG   ;
;***********************************
;---------------------------------
TMREND: 
         POP   XL           ;
         OUT   SREG,XL      ;
         POP   XL           ;
     RETI               ;
;*************************************




  
;****************************************
; KEY PROCESS
;OUTPUT: C, =0:NO KEY INPUT
;           =1: START INPUT
;USED REGISTER: XL,XH
;****************************************
KEY:      WDR                         ;RESET WATCH-DOG TIMER
          IN    XL,PINC               ;
      ANDI  XL,0B11100000         ;
          MOV   R2,XL                 ;
      LDI   XL,0B11100000         ;
      CP    R2,XL                 ;
      BREQ  KEYEND                ;

          RCALL DEL                   ;

          IN    XL,PINC               ;
      ANDI  XL,0B11100000         ;
          MOV   R2,XL                 ;
      LDI   XL,0B11100000         ;
      CP    R2,XL                 ;
      BREQ  KEYEND                ;
;--------------------------------------------
          CBI   PORTC,0               ;
          SBIC  PINC,  7              ;
          RJMP  KEY11                 ;
WAITREL1: WDR                         ;RESET WATCH-DOG TIMER
          RCALL DISP                  ;
          SBIS  PINC,  7              ;
          RJMP  WAITREL1              ;
;------------------------------------------
          LDI   XL,0B00000001         ;
          EOR   R18,XL                ;

          RJMP  KEYEND                ;
;******************************************         
KEY11:
          SBIC  PINC,  6              ;
          RJMP  KEY12                 ;
WAITREL2: WDR                         ;RESET WATCH-DOG TIMER
          RCALL DISP                  ;
          SBIS  PINC,  6              ;
          RJMP  WAITREL2              ;
;-----------------------------------------
          LDI   XL,0B00000010         ;
      EOR   R18,XL                ;
;******************************************
KEYEND:  
          RET                 
;******************************************
KEY12:
          SBIC  PINC,  5              ;
          RJMP  KEYEND                ;
WAITREL3: WDR                         ;RESET WATCH-DOG TIMER
          RCALL DISP                  ;
          SBIS  PINC,  5              ;
          RJMP  WAITREL3              ;
;-------------------------------------------
          LDI   XL,0B00000100         ;
      EOR   R18,XL                ;
      RJMP  KEYEND                ;  
;******************************************




;******************************************
; DELAY A MOMENT, MIN=0.25ms, MAX=64ms
; INPUT:  DLREG
; USED REGISTER: DLREG
;******************************************
DELAY:    PUSH XL                    ;
          PUSH XH                    ;
          IN   XL,    TCNT1L         ; T1 COUNTER’S f=FCLK/1024
DELAY1:   WDR                        ; RESET WDT
          IN   XH,    TCNT1L         ;
          SUB  XH,    XL             ;
          CP   XH,    DLREG          ;
          BRLO DELAY1                ;
          POP  XH                    ;
          POP  XL                    ;
          RET                        ;
;******************************************
DEL:      
;         LDI  R19,$03               ;
      LDI  XL,40                 ;
      LDI  XH,10                 ; 
DEL1:     DEC  XL                    ;
          BRNE DEL1                  ;
      DEC  XH                    ;
      BRNE DEL1                  ;
;      WDR                        ;
;      DEC  R19                   ;
;      BRNE DEL1                  ;
      RET                        ;
;******************************************
DEL2: 
      LDI  XL,10                 ;
      LDI  XH,10                 ; 
DEL3:     DEC  XL                    ;
          BRNE DEL3                  ;
          DEC  XH                    ;
      BRNE DEL3                  ;
      RET                        ;
;******************************************
; DELAY , MIN=4ms, MAX=1Sec
; INPUT:  DLREG
; USED REGISTER: DLREG
;******************************************
DL64MS:   PUSH XL
          PUSH XH
          IN   XL,    TCNT1L
          IN   XL,    TCNT1H         ; T1 COUNTER’S f=FCLK/64
DL64MS1:  WDR                        ; RESET WDT
          IN   XH,    TCNT1L
          IN   XH,    TCNT1H
          SUB  XH,    XL
          CP   XH,    DLREG
          BRLO DL64MS1
          POP  XH
          POP  XL
          RET
;*********************************************
; DECIL-->HEX
; INPUT:  XL
; OUTPUT: YL=XL.(b7b6b5b4)*10 + XL.(b3b2b1b0)
; USED REGISTER: XL,XH,YL,YH
;*********************************************
DECHEX:   MOV  YL,    XL             ;XL.(b7b6b5b4)-->YL.(b3b2b1b0)
          ANDI XL,    $0F            ;
          ANDI YL,    $F0            ;
          SWAP YL                    ;
          LSL  YL                    ;YL*2
          MOV  XH,    YL             ;YL-->XH
          LSL  YL                    ;YL*4
          LSL  YL                    ;
          ADD  YL,    XH             ;
          ADC  YL,    XL             ;
          RET                        ;
;*********************************************
; HEX-->DECIL
; INPUT:  XL
; OUTPUT: YL=(((((((b7*2+b6)+b5)*2+...)*2+b0
; USED REGISTER: XL,YL,YH,ZL,ZH
;*********************************************
HEXDEC:   CLR  YL
          LDI  ZL,    6
          LDI  ZH,    8
HEXDEC1:  CLC
          ROL  XL
          ROL  YL
          SBRC YL,    4
          ADD  YL,    ZL
          MOV  YH,    YL
          ANDI YH,    $0F
          CPI  YH,    $0A
          BRLO HEXDEC2
          ADD  YL,    ZL
HEXDEC2:  DEC  ZH
          BRNE HEXDEC1
          RET
;*********************************************


 ;**********************************************
; WHEN OPERATING LCD MODULE, WAIT FOR A MOMENT
; USED REGISTER: 
;**********************************************
WAIT:    PUSH  XL 
         CLR   XL 
WAIT1:   INC   XL 
         CPI   XL,      0X0A
         BRLO  WAIT1
         POP   XL 
         RET                ;
;*************************************

;*************************************
LEDDISP:  
          LDI   R16,$FF              ;
      LDI   R17,$08              ;
      CLC                        ;
LEDLOOP:
          WDR
      ROR   R16                  ;
      OUT   PORTA,R16            ;
      LDI   DLREG,$08            ;
          RCALL DL64MS               ;
          DEC   R17                  ;
      BRNE  LEDLOOP              ;

          CBI   PORTC,0              ;
      SBI   PORTC,1              ;

      LDI   XL,$FF               ;
      OUT   PORTA,XL             ;
      LDI   DLREG,$08            ;
          RCALL DL64MS               ;
;-----------------------------------------
          LDI   R16,$FF              ;
      LDI   R17,$08              ;
      CLC                        ;
LEDLOOP1:
          WDR
          ROL   R16                  ;
      OUT   PORTA,R16            ;
      LDI   DLREG,8              ;
          RCALL DL64MS               ;
          DEC   R17                  ;
      BRNE  LEDLOOP1             ;

      CBI   PORTC,1              ;
      SBI   PORTC,0              ;

      LDI   XL,$FF               ;
      OUT   PORTA,XL             ;
          RJMP  LEDDISP              ;
;***************************************


;***************************************
DISPLAY:  
          CBI   PORTC,0              ;
      MOV   XL,ADL               ;
      ANDI  XL,$0F               ;
      LDI   ZL,LOW(2*TABLE)      ;
      LDI   ZH,HIGH(2*TABLE)     ;
      ADD   ZL,XL                
          LPM                        ;
          MOV   XL,R0                ;

      OUT   PORTA,XL             ;
      SBRC  FLAG,DISPB           ;
      RJMP  DISPDOT1             ;
      CBI   PORTA,7              ;
      RJMP  DISPNEXT1            ;
DISPDOT1:
      SBI   PORTA,7              ;
DISPNEXT1:
      RCALL DELAY                ;
      SBI   PORTC,0              ;
;----------------------------------------
          CBI   PORTC,1              ;
      MOV   XL,ADL               ;
      SWAP  XL                   ;
      ANDI  XL,$0F               ;
      LDI   ZL,LOW(2*TABLE)      ;
      LDI   ZH,HIGH(2*TABLE)     ;
      ADD   ZL,XL                
          LPM                        ;
          MOV   XL,R0                ;
      OUT   PORTA,XL             ;
      SBRC  FLAG,DISPB           ;
      RJMP  DISPDOT2             ;
      CBI   PORTA,7              ;
      RJMP  DISPNEXT2            ;
DISPDOT2:
      SBI   PORTA,7              ;
DISPNEXT2:
      RCALL DELAY                ;
      SBI   PORTC,1              ;
;----------------------------------------
          CBI   PORTC,2              ;
      MOV   XL,ADH               ;
      ANDI  XL,$0F               ;
      LDI   ZL,LOW(2*TABLE)      ;
      LDI   ZH,HIGH(2*TABLE)     ;
      ADD   ZL,XL                
          LPM                        ;
          MOV   XL,R0                ;
      OUT   PORTA,XL             ;
      RCALL DELAY                ;
      SBI   PORTC,2              ;
;---------------------------------------- 
          CBI   PORTC,3              ;
      MOV   XL,ADH               ;
      SWAP  XL                   ;
      ANDI  XL,$0F               ;
      LDI   ZL,LOW(2*TABLE)      ;
      LDI   ZH,HIGH(2*TABLE)     ;
      ADD   ZL,XL                
          LPM                        ;
          MOV   XL,R0                ;
      OUT   PORTA,XL             ;
          RCALL DELAY                ;
      SBI   PORTC,3              ;
          RET                        ; 
;**************************************** 


;***********************************
TABLE:   .DB $C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90
         .DB $88,$83,$C6,$A1,$86,$8E
;***********************************

阅读:
录入:JETTA

推荐 】 【 打印
上一篇:
下一篇:
本文评论
      全部评论
    123 于16日评论道: 查看全部评论  
呵呵
发表评论


点评: 字数
姓名:
赞助商广告