Professional Documents
Culture Documents
VD1
;****************************************************************************************
;GIAO TIẾP SW – CHỐNG RUNG(PP1)
;SW:PB0 – LED:PC0
;KHI CÓ NÚT NHẤN ĐIỀU KHIỂN LED SÁNG TRONG 100MS
;****************************************************************************************
SBI PORTC,0 ;nếu vẫn còn nhấn(SW=0) thì điều khiển led sáng trong 100ms
RCALL DELAY_100MS
CBI PORTC,0 ;tắt LED
RJMP WAIT ;tiếp tục kiểm tra SW
;****************************************************************************************
;GIAO TIẾP SW – CHỐNG RUNG(PP2)
;SW:PB0 – LED:PC0
;KHI CÓ NÚT NHẤN ĐIỀU KHIỂN LED SÁNG TRONG 100MS
;****************************************************************************************
CBI DDRB,0 ;PB0:INPUT
SBI PORTB,0 ;
SBI DDRC,0 ;PC0: output
CBI PORTC,0 ;ĐK LED tắt
WAIT0:
LDI R20,50
WAIT1:
SBIC PINB,0
RJMP WAIT0
DEC R20
BRNE WAIT1
SBIC PINB,0
RJMP WAIT1
SBI PORTC,0 ;nếu vẫn còn nhấn thì điều khiển led sáng trong 100ms
RCALL DELAY_100MS
CBI PORTC,0
RJMP WAIT0 ;tiếp tục kiểm tra SW
DELAY_10MS:
PUSH R21
PUSH R20
LDI R21,80
L2 :(2+1+1)x250 = 1000MC
L1: LDI R20,250
L2: DEC R20 L1: 80x1000MC = 10 MS
NOP
BRNE L2
DEC R21
BRNE L1
POP R20
POP R21
RET
;****************************************************************************************
;CTC DELAY_100MS, f=8MHz, CKDIV8=1
;****************************************************************************************
DELAY_100MS:
PUSH R21
LDI R21,10
L3: CALL DELAY_10MS
DEC R21
BRNE L3
POP R21
RET
START:
LDI R18,0 ;NUMBER=0
LOOP:
MOV R20,R18
RCALL 7SEG_CC
OUT PORTB,R20
RCALL DELAY_500MS
INC R18
CPI R18,10
BRNE LOOP
RJMP START
7SEG_CC:
;*****************************************
;INPUT: R20=NUMBER
;OUTPUT:R20=CODE_SEG7_CC
;*****************************************
LDI ZH,HIGH(CODE_7SEG_CC<<1)
LDI ZL,LOW(CODE_7SEG_CC<<1)
ADD ZL,R20
BRCC FINAL
INC ZH
FINAL:
LPM R20,Z
RET
LDI R16,$FF
OUT DDRB,R16
START:
LDI R16,9
LOOP:
OUT PORTB,R16
RCALL DELAY_500MS
DEC R16
CPI R16,-1
BRNE LOOP
RJMP START
;****************************************************************************************
;THIẾT LẬP CÁC CỔNG IO GIAO TIẾP LCD
;****************************************************************************************
LDI R18,$34
fixed LDI R19,$01
LDI R20,$0C
LDI R21,$06
RCALL INIT_LCD8 CTC khoi dong va dat cau hinh cho lcd
;****************************************************************************************
;CTC CHÍNH
;****************************************************************************************
START:
CBI PORTC,RS ;RS=0: ghi lệnh
LDI R17,$80 ;$80: đầu dòng, $8F: cuối dòng
RCALL OUT_LCD
RJMP START
RESET_LCD:
;****************************************************************************************
;RESET LCD
;****************************************************************************************
LDI R16,250 ;delay 25ms
RCALL DELAY_US ;
LDI R16,250 ;delay 25ms
RCALL DELAY_US ;
CBI PORTC,RS
LDI R17,$30 ;mã lệnh=$30 lần 2
OUT PORTB,R17 ;ghi lệnh ra LCD
SBI PORTC,E
CBI PORTB,E
LDI R16,2 ;delay 200μs
RCALL DELAY_US
CBI PORTC,RS
LDI R17,$30 ;mã lệnh=$30 lần 3
RET
INIT_LCD8:
;****************************************************************************************
;KHỞI ĐỘNG LCD GIAO TIẾP 8BIT
;INPUT: R18,R19,R20,R21
;1. Function set: 1 dòng font 5x10($34) R18
;2. Clear display: xóa màn hình($01) R19
;3. Display on/off control: màn hình ON,con trỏ OFF($0C) R20
;4. Entry mode set: dịch phải con trỏ ,đ/c DDRAM tăng 1 khi ghi data($06) R21
;****************************************************************************************
OUT_LCD:
;****************************************************************************************
;XUẤT LỆNH/DATA RA LCD
;INPUT: R17=LỆNH/DATA
;****************************************************************************************
OUT PORTB,R17
SBI PORTC,E
CBI PORTC,E
RET
DELAY_US:
;****************************************************************************************
;DELAY_US tạo thời gian trễ = R16x100μs(Fosc = 8Mhz)
;INPUT:R16 hệ số nhân thời gian trễ 1 đến 255
;****************************************************************************************
MOV R15,R16
LDI R16,200
L1:
VD5
CTĐK HIỂN THỊ LCD
MICROCONTROLLER
ATMEGA 324P
LDI R16,0XFF
OUT DDRB,R16 ;PORTB: OUTPUT
SBI DDRC,RS ;PC0,PC1,PC2: OUTPUT
SBI DDRC,RW
SBI DDRC,E
RCALL RESET_LCD
LDI R18,$38
LDI R19,$01
LDI R20,$0C
LDI R21,$06
RCALL INIT_LCD8
START:
CBI PORTC,RS ;RS=0 ghi lệnh
LDI R17,$81 ;con trỏ bắt đầu ở dòng 1 vị trí thứ 2
RCALL OUT_LCD ;
LDI R16,1
RCALL DELAY_US
LINE1:
LPM R17,Z+ ;lấy mã ASCII ký tự từ Flash ROM
CPI R17,CR ;kiểm tra ký tự xuống dòng?
BREQ DOWN ;nếu là CR thì xuống dòng
DOWN:
CBI PORTC,RS ;RS=0 ghi lệnh
LDI R17,$C3 ;con trỏ bắt đầu ở dòng 2 vị trí thứ 4
RCALL OUT_LCD ;
LDI R16,1 ;chờ thực thi xong
RCALL DELAY_US
LINE2:
LPM R17,Z+ ;lấy mã ASCII ký tự từ Flash ROM
CPI R17,NULL ;kiểm tra ký tự kết thúc
BREQ HERE ;nếu là ký tự NULL thì kết thúc
HERE:
JMP HERE ;
;****************************************************************************************
;THIET LAP IO PORT
;PORTD:INPUT
;PB0,PB1,PB2: OUTPUT
;****************************************************************************************
;****************************************************************************************
;ĐỊNH NGHĨA CÁC IO PORT
;PORTB=CONT: điều khiển IC74595
;PB0: NGÕ DỊCH(Pxn)
;PB1: CK DỊCH(SHCP)
;PB2: CK XUẤT(STCP)
;****************************************************************************************
.EQU CONT=PORTB
.EQU Pxn=0 ;NGÕ DỊCH
.EQU SHCP=1 ;CK DỊCH
.EQU STCP=2 ;CK XUẤT
;****************************************************************************************
;CTC CHÍNH
;****************************************************************************************
CBI CONT,SHCP ;CK dịch=0
CBI CONT,STCP ;CK xuất=0
START:
IN R17,PIND ;đọc data từ PORTD
RCALL SHIFT_OUT ;gọi ctc ghi dịch
RJMP START
SHIFT_OUT:
;****************************************************
;CTC DỊCH 8 BIT RA Pxn(PB0)
;INPUT: R17 DATA
;OUTPUT: Pxn DATA, R17=DATA(bảo toàn nội dung R17)
;****************************************************
LDI R18,8 ;
BIT_0:
CBI CONT, Pxn ;
SH_CK:
SBI CONT,SHCP ; ban đâu đã cho bang 0
CBI CONT,SHCP bay h cho len 1 de tao
xung clk canh lên
DEC R18 ;
BRNE SH_O ;
SBI CONT,STCP ;
CBI CONT,STCP
ROL R17 ;
RET
;****************************************************************************************
;THIẾT LẬP CÁC CỔNG IO
;****************************************************************************************
LDI R16,$FF ;PORTA: OUTPUT
OUT DDRA,R16
SBI DDRD,0 ;PD0 : output
SBI DDRD,1 ;PD1 : output
START:
CBI PORTD,0 ;khóa chốt 74573A
CBI PORTD,1 ;khóa chốt 74573B
LDI R17,1 ;Chọn LED hiển thị
OUT PORTA,R17 ;đặt lên DATA BUS 573
SBI PORTD,0 ;mở chốt 74573A để xuất data
CBI PORTD,0 ;khóa chốt 74573A
LDI R18,$89 ;mã 7 đoạn cần hiển thị
OUT PORTA,R18 ;đặt lên DATA BUS 573
SBI PORTD,1 ;mở chốt 74573B để xuất data
CBI PORTD,1 ;khóa chốt 74573B
RJMP START
START:
LDI R18,1
LDI R17,4
CALL SCANLED_7SEG
RCALL DELAY_10MS
LDI R18,2
LDI R17,3
CALL SCANLED_7SEG
RCALL DELAY_10MS
LDI R18,4
LDI R17,2
CALL SCANLED_7SEG
RCALL DELAY_10MS
LDI R18,8
LDI R17,1
CALL SCANLED_7SEG
RCALL DELAY_10MS
RJMP START
SCANLED_7SEG:
;****************************************************************************************
;IN: R18= CHỌN LED HIỂN THỊ (MỨC 1)
; R17= SỐ BCD CẦN HIỂN THỊ
;****************************************************************************************
OUT PORTA,R18
SBI PORTD,0 ;mở chốt 74573A để xuất data
CBI PORTD,0 ;khóa chốt 74573A
CALL CODE_7SEG_AC
OUT PORTA,R17
SBI PORTD,1 ;mở chốt 74573B để xuất data
CBI PORTD,1 ;khóa chốt 74573B
RET
CODE_7SEG_AC:
;****************************************************************************************
;IN: R17=BCD
;OUT: R17=CODE_7SEG_AC
;****************************************************************************************
LDI ZH,HIGH(TABLE<<1)
LDI ZL,LOW(TABLE<<1)
ADD ZL,R17
BRCC FINAL
INC ZH
FINAL:
DELAY_10MS:
PUSH R21
PUSH R20
LDI R21,80
L1: LDI R20,250
L2: DEC R20
NOP
BRNE L2
DEC R21
BRNE L1
POP R20
POP R21
RET
;****************************************************************************************
;THIET LAP IO PORT
;PORTB: OUT
;PC0,PC1: OUT
;****************************************************************************************
LDI R16,$FF
OUT DDRB,R16
LDI R16,0X07
OUT DDRC,R16 ;khai báo PC0,PC1,PC2 là output
Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 12
CBI PORTC,0 ;khóa ngõ ra U2(HANG)
CBI PORTC,1 ;khóa ngõ ra U3(COT)
START:
LDI ZH,HIGH(TAB_CHR<<1) ;Z<--D/C DAU BANG DATA COT/DATA HANG
LDI ZL,LOW(TAB_CHR<<1)
LDI R19,8 ;DEM 8 LAN QUET
LDI R18,0X01 ;MA QUET COT 0, HANG 0
LOOP:
;****************************************************************************************
;QUET THEO COT
;****************************************************************************************
OUT PORTB,R18 ;XUAT MA QUET COT
SBI PORTC,1 ;MO U3
CBI PORTC,1 ;KHOA U3
/*
;****************************************************************************************
;QUET THEO HANG
;****************************************************************************************
OUT PORTB,R18 ;XUAT MA QUET HANG
SBI PORTC,0 ;MO U2
CBI PORTC,0 ;KHOA U2
*/
RJMP START
TAB_CHR: .DB $0,$18,$24,$24,$18,$24,$0,$0 ;DATA COT
;TAB_CHR: .DB $0,$0,$2C,$12,$12,$2C,$0,$0 ;DATA HANG
;****************************************************************************************
DELAY_1MS:
;****************************************************************************************
PUSH R14
PUSH R15
PUSH R16
LDI R16,8
MOV R15,R16
LDI R16,250
POP R16
POP R15
POP R14
RET
SBI PORTC,0
SBI PORTC,1
START:
CBI PORTC,0
IN R18,PINB
SBI PORTC,0
CBI PORTC,1
IN R20,PINB
SBI PORTC,1
ADD R20,R18
OUT PORTA,R20
RJMP START