Chat
Danh mục
Propeller Clock with AVR

Propeller Clock with AVR

Số lượng:
Thêm vào giỏ
Propeller Clock with AVR đã được thêm vào giỏ hàng


Phần cứng hiện thời rất đơn giản:
+ ATmega8515 - vì tui có sẵn con này
+ Led đỏ, xanh dương
+ IR led
+ 1 Transistor C1815, 1 tụ
+ Động cơ DC12V - giá 10k mua

Ảnh tiếp nè:



Sơ đồ phần cứng:
Thực ra cũng cực kỳ đơn giản:


Chương Trình Asembly:

 .include "m8515def.inc"
.def     SREG_store = R2           ;use to save SREG during an ISR
.def     NULL = R3
 
.def     Temp = R16
.def     Temp2 = R17
.def     LedData = R18
.def     sec1     = R19
.def     sec2     = R20
.def     minute1  = R21
.def     minute2  = R22
.def     work     = R23
 
// variable
.CSEG
         .org     0x0000
         rjmp     RESET
         .org     0x0001
         rjmp     INT0ISR
 
;============================================================
 
RESET:
ldi      Temp,LOW(RAMEND)          ; init Stack
out      SPL,Temp
ldi      Temp,HIGH(RAMEND)
out      SPH,Temp
 
// xac dinh che do cho cac pin
ldi      Temp,0xFF        
out      DDRA,Temp        ;PORTA = OUT
 
ldi      Temp,(1<
out      MCUCR,Temp
ldi      Temp,(1<
out      GICR,Temp
 
sec
ldi      LedData,0xFF
out      PORTA,LedData
ldi      minute1,0
ldi      minute2,9
ldi      sec1,0
ldi      sec2,0
mov      NULL,sec2
sei      ;enable interupt
LOOP:
         ldi      Temp,18
         main_l:
                 rcall    delay
                 dec      Temp
                 brne     main_l
         inc      sec2
         cpi      sec2,10
         brne     notOVER
         clr      sec2
         inc      sec1
         cpi      sec1,6
         brne     notOVER
         clr      sec1
         inc      minute2
         cpi      minute2,10
         brne     notOVER
         clr      minute2
         inc      minute1
         cpi      minute1,6
         brne     notOVER
         clr      minute1
notOVER:
rjmp     LOOP
 
//--------------------------------
INT0ISR:
cli
in       SREG_store,SREG
mov      work,sec2
rcall    LEDdisplay
mov      work,sec1
rcall    LEDdisplay
 
ldi      LedData,0b11100111
out      PORTA,LedData
rcall    delayCOL
ldi      LedData,0xFF
out      PORTA,LedData
rcall    delayCOL
rcall    delayCOL
rcall    delayCOL
mov      work,minute2
rcall    LEDdisplay
mov      work,minute1
rcall    LEDdisplay
 
ldi      LEDdata,0xFF
out      PORTA,LEDdata
out      SREG,SREG_store
sei
RETI
;---------------------------------
LEDdisplay:
push     Temp
ldi      Zh,high(NUMBER<<1)
ldi      Zl,low (NUMBER<<1)
cpi      work,0
brne     LD_distance
rjmp     LD_notmath
 
LD_distance:
adiw     Zl,8
dec      work
brne     LD_distance
 
LD_notmath:
ldi      Temp,8
LD_loop:
         LPM      LedData,Z+
         out      PORTA,LedData
         rcall    delayCOL
         dec      Temp
brne     LD_loop
 
ldi      Temp,0xFF
out      PORTA,Temp
rcall    delayCOL
rcall    delayCOL
rcall    delayCOL
pop      Temp
Ret
;---------------------------------
 
delayCOL:
push     Temp
push     Temp2
ldi      Temp,16
DCouter_loop:
ldi      Temp2,100
DCinner_loop:
 nop
 nop
 dec     Temp2
brne     DCinner_loop
dec      Temp
brne     DCouter_loop
 
ldi      Temp,0xFF
out      PORTA,Temp
ol1:
dec      Temp
brne     ol1
 
pop      Temp2
pop      Temp
ret
 
 
NUMBER:
;number 0
.db      0b00000001, 0b01111101, 0b01111101, 0b01111101, 0b01111101, 0b01111101, 0b01111101, 0b00000001
 
;number 1
.db      0b00000001,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 
;number 2
.db      0b00001101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01100001
 
;number 3
.db      0b00000001, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101
 
;number 4
.db      0b00000001, 0b11101111, 0b11101111, 0b11101111, 0b11101111, 0b11101111, 0b11101111, 0b00001111
 
;number 5
.db      0b01100001, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b00001101
 
;number 6
.db      0b01100001, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b00000001
 
;number 7
.db      0b00000001, 0b01101111, 0b01101111, 0b01101111, 0b01101111, 0b01101111, 0b01101111, 0b01101111
 
;number 8
.db      0b00000001, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b00000001
 
;number 9

.db 0b00000001, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b01101101, 0b00001101


Theo Dientuvietnam.net