You are on page 1of 14

Lập trình AVR assembly và

giao tiếp ngoại vi (phần 1)

Võ Thị Thu Hồng 1


Các lệnh thông dụng

Võ Thị Thu Hồng 2


Các lệnh thông dụng (tt)

Võ Thị Thu Hồng 3


Lập giải thuật chương trình

VD: Viết đoạn chương trình xóa thanh ghi R20,


sau đó cộng 10 lần nội dung thanh ghi R20 với 3,
kết quả cuối cùng xuất ra Port B (cho biết PortB
đã được lập trình xuất) .

Dùng các lệnh rẽ nhánh để


lập vòng

Võ Thị Thu Hồng 4


Viết chương trình con Delay dùng vòng lặp

Delay dùng 1 vòng lặp

Số chu kỳ máy

Khi thực hiện rẽ nhánh, chiếm 2 chu kỳ. Kết thúc, chiếm 1 chu kỳ

Giả sử AVR hoạt động tần số 8MHz ➔ 1 MC= 125ns


Thời gian Delay = [1 + (( 1 + 1 +1 +2) x 255 -1) + 4 ] x 125ns
= 1279 x 125ns = 159.875 ns = 159,875 µs

Chú ý: Nếu số lần lặp >>1, có thể tính gần đúng:


Thời gian Delay = (( 1 + 1 +1 +2) x 255 ) x 125ns
= 159.375 ns ≈ 160 µs

Võ Thị Thu Hồng 5


Viết chương trình con Delay dùng vòng lặp (tt)
Delay dùng các vòng lặp lồng nhau

Số chu kỳ máy

Tính gần đúng số


chu kỳ máy
≈ 5x250 MC ≈ (5x250)x200 MC=
250000MC

Tính chính xác số chu kỳ máy (MC) của Delay là:


[1 + ( ( 1 + 1 +1 +2) x 250 -1) x200 + (1 + 1 + 2)x200 -1 +4 ] MC = 255.604 MC

LDI R17,250 DEC R16 BRNE AGAIN RET

Võ Thị Thu Hồng 6


Viết chương trình con Delay dùng vòng lặp (tt)
VD: Viết chương trình đảo trạng thái của
thanh ghi R16 và xuất ra PORTB sau mỗi
1s. Cho AVR ATmega32 có tần số dao động
thạch anh XTAL=8Mhz

Tính số chu kỳ máy và vòng lặp:


1MC = 1/8MHz =0,125 µs
1s= 1.000.000 µs =8.000.000MC
1s =32 x 200 x 250 x 5 MC

Võ Thị Thu Hồng 7


Các thông số cơ bản của AVR MCU324P

Võ Thị Thu Hồng 8


Viết chương trình đọc nút nhấn
VD: Viết chương trình đọc trạng thái của nút nhấn tại PB0, PB0=0 (nhấn nút) thì LED ngõ ra PC0
đảo trạng thái. Chống rung bằng chương trình con Delay 10ms, XTAL=8MHz

LDI R16, 0B11111110


OUT DDRB, R16

LDI R16, 0B00000001


OUT PORTB, R16

XOR
Tính giá trị điện trở hạn dòng:
R = (VOH – VD)/ ID NHẤN VÀO
Điện áp trung bình của LED đơn VD =2V SÁNG,
chọn dòng qua LED ID = 10mA , NHẤN LẠI
VOH= 5V → R=300 Ω chọn R=330 Ω TẮT
Võ Thị Thu Hồng 9
Viết chương trình đọc nút nhấn (tt)
Có thể thêm đoạn chương trình bên dưới để đảm bảo nút nhấn vẫn ở mức 0 để thực
hiện tiếp chương trình. CHO f = 1 MHz => T = 1 uS

4*250*80 SẤP SỈ

Võ Thị Thu Hồng 10


Viết chương trình đọc nút nhấn (tt)
VD: Viết chương trình hiển thị dãy LED .INCLUDE<M324PADEF.INC>
.ORG 0
theo các nút nhấn: LDI R16,0xF0
OUT DDRB,R16 ; PB0 – PB3 nhập
SW0 : các LED tắt. LDI R16,0X0F
SW1: sáng 4 LED PC0 đến PC3 OUT PORTB,R16 ; chọn đi65n trở kéo lên PB0 – PB3
LDI R16,0XFF
SW2: sáng 4 LED PC4 đến PC7 OUT DDRC,R16 ; PortC xuất
LOOP:IN R18,PINB ; đọc portB
SW3: sáng toàn bộ LED COM R18 ; bù giá trị đọc
CPI R18,1 ; nhấn SW0 ?
BRNE SW1
M0: LDI R16,0 ;nếu nhấn SW0 thì xóa LED
Có thể thêm OUT PORTC,R16
đoạn chương RJMP LOOP
trình chống
SW1: CPI R18,2 ; nhấn SW1?
rung nút nhấn
BRNE SW2
M1: LDI R16,0X0F ; nếu nhấn SW1 thì sáng
OUT PORTC,R16 ; PC0 đến PC3
RJMP LOOP
SW2: CPI R18,4 ; nhấn SW2?
BRNE SW3
M2: LDI R16,0XF0 ; nếu nhấn SW2 thì sáng
OUT PORTC,R16 ; PC4 đến PC7
RJMP LOOP
SW3: CPI R18,8 ; nhấn SW3?
BRNE LOOP
M3: LDI R16,0XFF ; nếu nhấn SW3 thì sáng
OUT PORTC,R16 ; toàn bộ LED
Tổng dòng cấp ra trung bình cho 8
RJMP LOOP
LED là:8x10mA → cho phép
Võ Thị Thu Hồng 11
Viết chương trình đọc trạng thái ngõ vào port
VD: Viết chương trình đọc trạng thái của chân PB3 và PB2. Nếu PB2=1 → PB7=0 và PB6=1
Nếu PB3=1 → PB7=1 và PB6=0.

Võ Thị Thu Hồng 12


Viết chương trình hiển thị LED7 đoạn 2 cách giao tiếp:
Trực tiếp
VD: Viết chương trình hiển thị ra LED 7 đoạn anode chung lần lượt các giá trị qua ic giải mã
từ 0 đến F sau mỗi 1s và lặp lại, cho XTAL=8MHz
Có 2 loại Anode chung sáng = 0 I từ 5mA đến 10mA
Catotde chung sáng = 1

Võ Thị Thu Hồng 13


Viết chương trình hiển thị LED7 đoạn (tt)

.INCLUDE<M324PADEF.INC>
.ORG 0
DELAY1S: LDI R16,80 ;1MC
FF
LDI R16,0x00
L1: LDI R17,100 ;1MC
OUT DDRB,R16
L2: LDI R18,250 ;1MC
START:LDI R16,16
L: DEC R18 ;1MC
LDI ZH,HIGH(TABLE<<1)
NOP ;1MC
LDI ZL,LOW(TABLE<<1)
BRNE L ;2/1MC
LOOP:LPM R17, Z+
DEC R17 ;1MC
DEC R16
BRNE L2 ;2/1MC
BRNE DISPLAY
DEC R16 ;1MC
RJMP START
BRNE L1 ;2/1MC
DISPLAY: OUT PORTB, R17
RET ;4MC
RCALL DELAY1S
RJMP LOOP
TABLE:.DB 0xC0,0xF9,0xA4,0xB0,0x99
.DB 0x92,0x82,0xf8,0x80,0x90,0x88
.DB,0x83,0xC6,0xA1,0x86,0x8E

Võ Thị Thu Hồng 14

You might also like