Download as pdf or txt
Download as pdf or txt
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