You are on page 1of 15

GIAO TIẾP TRỰC TIẾP – SW/LED ĐƠN

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
;****************************************************************************************

CBI DDRB,0 ;PB0:INPUT


SBI PORTB,0 ;
SBI DDRC,0 ;PC0: output
CBI PORTC,0 ;ĐK trạng thái ban đầu cho LED tắt

WAIT: SBIC PINB,0 ;ĐỌC SW


RJMP WAIT ;chưa có thì đọc lại(SW=1)
RCALL DELAY_10MS ;nếu có chờ 10ms
SBIC PINB,0 ;đọc lại SW
RJMP WAIT ;

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

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 1


;****************************************************************************************
;CTC DELAY_10MS, f=8MHz, CKDIV8=1
;****************************************************************************************

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

GIAO TIẾP TRỰC TIẾP –LED 7 ĐOẠN CC


VD2

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 2


;****************************************************************************************
;COUNTER UP MOD10 CC_7SEG
;****************************************************************************************

LDI R16,$FF ;PORTB:OUTPUT


OUT DDRB,R16

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

CODE_7SEG_CC: .DB $3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F

GIAO TIẾP TRỰC TIẾP –LED 7 ĐOẠN AC


VD3

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 3


;****************************************************************************************
;COUNTER DOWN MOD10 AC_7SEG (GIAI MA IC7447)
;****************************************************************************************

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

đe giao tiep lcd can su dung 4 CTC


GIAO TIẾP TRỰC TIẾP – LCD
1. Reset_LCD
2. Init_LCD (de lua chon cau hinh cho lcd)
VD4 3. Out_LCD (de xuat lenh/du lieu le lcd)
4. Delay 100us(moi lan xuat len lcd can phai co thoi gian cho de thuc thi)

;****************************************************************************************
;THIẾT LẬP CÁC CỔNG IO GIAO TIẾP LCD
;****************************************************************************************

.EQU RS=0 ;bit RS


.EQU RW=1 ;bit RW
.EQU E=2 ;bit E

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 4


LDI R16,0XFF
OUT DDRB,R16 ;PORTB: OUTPUT
SBI DDRC,RS ;PC0=RS,PC1=RW,PC2=E: OUTPUT
SBI DDRC,RW
SBI DDRC,E

RCALL RESET_LCD CTC reset nguon khoi dong 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

LDI R16,1 ;chờ thực thi xong lệnh


RCALL DELAY_US

SBI PORTC,RS ;RS=1: ghi DATA


LDI R17,'A'
RCALL OUT_LCD ;

LDI R16,1 ;chờ thực thi xong lệnh


RCALL DELAY_US

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 ;RS=0 ghi lệnh


LDI R17,$30 ;mã lệnh=$30 lần 1
OUT PORTB,R17 ;ghi lệnh ra LCD
SBI PORTC,E ;xuất xung cho phép LCD
CBI PORTC,E ;
LDI R16,42 ;delay 4.2ms
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

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 5


OUT PORTB,R17 ;
SBI PORTC,E
CBI PORTC,E
LDI R16,1 ;delay 200μs
RCALL DELAY_US

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
;****************************************************************************************

CBI PORTC,RS ;ghi lệnh


MOV R17,R18 ;Function set
RCALL OUT_LCD
LDI R16,1 ;chờ thực thi xong lệnh
RCALL DELAY_US

CBI PORTC,RS ;ghi lệnh


MOV R17,R19 ;Clear display
RCALL OUT_LCD
LDI R16,20 ;chờ thực thi xong lệnh
RCALL DELAY_US

CBI PORTC,RS ;ghi lệnh


MOV R17,R20 ;Display on/off control
RCALL OUT_LCD
LDI R16,1 ;chờ thực thi xong lệnh
RCALL DELAY_US

CBI PORTC,RS ;ghi lệnh


MOV R17,R21 ;Entry mode set
RCALL OUT_LCD
LDI R16,1 ;chờ thực thi xong lệnh
RCALL DELAY_US
RET

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:

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 6


MOV R14,R16
L2:
DEC R14
NOP
BRNE L2
DEC R15
BRNE L1
RET

VD5
CTĐK HIỂN THỊ LCD
MICROCONTROLLER
ATMEGA 324P

.EQU RS=0 ;bit RS


.EQU RW=1 ;bit RW
.EQU E=2 ;bit E
.EQU CR=$0D ;mã xuống dòng
.EQU NULL=$00 ;mã kết thúc
;****************************************************************************************
;THIẾT LẬP CÁC CỔNG IO GIAO TIẾP LCD
;****************************************************************************************

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

LDI ZH,HIGH(TAB<<1) ;Z trỏ đầu bảng tra ký tự


LDI ZL,LOW(TAB<<1)

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

SBI PORTC,RS ;RS=1 ghi data hiển thị LCD


RCALL OUT_LCD ;ghi mã ASCII ký tự ra LCD

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 7


LDI R16,1 ;chờ thực thi xong
RCALL DELAY_US

RJMP LINE1 ;tiếp tục hiển thị dòng 1

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

SBI PORTC,RS ;RS=1 ghi data hiển thị LCD


RCALL OUT_LCD ;ghi mã ASCII ký tự ra LCD
LDI R16,1 ;chờ 100μs
RCALL DELAY_US

RJMP LINE2 ;tiếp tục hiển thị dòng 2

HERE:
JMP HERE ;

TAB: .DB "MICROCONTROLLER",$0D,"ATMEGA 324P",$0

GIAO TIẾP TRỰC TIẾP – THANH GHI DỊCH 74595


VD6

;****************************************************************************************
;THIET LAP IO PORT
;PORTD:INPUT
;PB0,PB1,PB2: OUTPUT
;****************************************************************************************

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 8


LDI R16,0X00 ;
OUT DDRD,R16 ;
LDI R16,0X07 ;
OUT DDRB,R16

;****************************************************************************************
;ĐỊ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 ;

SH_O: ROL R17 ;


BRCC BIT_0 ;
SBI CONT,Pxn ;
RJMP SH_CK ;

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

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 9


GIAO TIẾP GIÁN TIẾP – LED 7 ĐOẠN (74573)
VD7
;ĐK LED ĐƠN VỊ HIỂN THỊ CHỮ H
;****************************************************************************************
;GIAO TIẾP GIÁN TIẾP QUA IC CHỐT 73573(ĐỆM)
;HIỂN THỊ 1 LED ĐƠN VỊ - CHỮ H
;CHỌN LED: MỨC 1
;MÃ 7 ĐOẠN: ANODE CHUNG
;****************************************************************************************

;****************************************************************************************
;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

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 10


VD8
;ĐK 4 LED ĐƠN VỊ HIỂN THỊ CÁC SỐ 1234
;****************************************************************************************
;GIAO TIẾP GIÁN TIẾP QUA IC CHỐT 73573(ĐỆM)
;HIỂN THỊ 4 LED – SỐ 1234 – PP QUÉT LED
;CHỌN LED: MỨC 1
;MÃ 7 ĐOẠN: ANODE CHUNG
;****************************************************************************************

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:

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 11


LPM R17,Z
RET
TABLE: .DB $C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90

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

GIAO TIẾP GIÁN TIẾP–LED MA TRẬN(573&2803)


ĐIỀU KHIỂN HÀNG:TÍCH CỰC CAO (U2-PC0)
ĐIỀU KHIỂN CỘT:TÍCH CỰC CAO (U3-PC1)
VD9

;****************************************************************************************
;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

LPM R17,Z+ ;LAY DATA COT


OUT PORTB,R17 ;XUAT DATA COT
SBI PORTC,0 ;MO U2
CBI PORTC,0 ;KHOA U2
RCALL DELAY_1MS ;TAO TRE 1ms

CLC ;XOA CO C CHUAN BI QUAY


ROL R18 ;QUAY TRAI TAO MA QUET COT KE TIEP
DEC R19 ;GIAM SO LAN QUET
BRNE LOOP ;THOAT KHI QUET XONG 8 LAN

/*
;****************************************************************************************
;QUET THEO HANG
;****************************************************************************************
OUT PORTB,R18 ;XUAT MA QUET HANG
SBI PORTC,0 ;MO U2
CBI PORTC,0 ;KHOA U2

LPM R17,Z+ ;LAY DATA HANG


OUT PORTB,R17 ;XUAT DATA HANG
SBI PORTC,1 ;MO U3
CBI PORTC,1 ;KHOA U3
RCALL DELAY_1MS ;TAO TRE 1ms

CLC ;XOA CO C CHUAN BI QUAY


ROL R18 ;QUAY TRAI TAO MA QUET HANG KE TIEP
DEC R19 ;GIAM SO LAN QUET
BRNE LOOP ;THOAT KHI QUET XONG 8 LAN

*/
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

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 13


L1: MOV R14,R16
L2: DEC R14
NOP
BRNE L2
DEC R15
BRNE L1

POP R16
POP R15
POP R14

RET

MỞ RỘNG PORT GIAO TIẾP (74244)


VD10

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 14


;*****************************
;THIẾT LẬP CÁC CỔNG IO
;*****************************
LDI R16,0
OUT DDRB,R16
LDI R16,$FF
OUT DDRA,R16
SBI DDRC,0
SBI DDRC,1

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

Một số ví dụ CHƯƠNG 6- GV:Lê Thị Kim Anh Trang 15

You might also like