23
THĂNG LONG UNIVERSITY NGÀNH: MẠNG MÁY TÍNH & VIỄN THÔNG BÁO CÁO THỰC HÀNH ĐIỆN TỬ SỐ ĐỀ TÀI:SỬ DỤNG ATMEGA 8535 ĐO VÀ HIỂN THỊ NHIỆT ĐỘ NHÓM THỰC HIỆN: SINH VIÊN MSV VŨ ĐỨC CHÍNH A08811 HOÀNG SƠN TÙNG A08277 VÕ TRẦN HOÀNG A08496 TRẦN THỊ VÂN ANH A08170 NGUYỄN VĂN ĐIỆP A08305 …… GIẢNG VIÊN:NGUYỄN TRUNG ĐỒNG NIÊN HỌC:2007_2008

Avr 8535

Embed Size (px)

DESCRIPTION

8535

Citation preview

Page 1: Avr 8535

THĂNG LONG UNIVERSITY

NGÀNH: MẠNG MÁY TÍNH & VIỄN THÔNG

BÁO CÁO

THỰC HÀNH ĐIỆN TỬ SỐ

ĐỀ TÀI:SỬ DỤNG ATMEGA 8535 ĐO VÀ HIỂN THỊ NHIỆT ĐỘ

NHÓM THỰC HIỆN:

SINH VIÊN MSV

VŨ ĐỨC CHÍNH A08811

HOÀNG SƠN TÙNG A08277

VÕ TRẦN HOÀNG A08496

TRẦN THỊ VÂN ANH A08170

NGUYỄN VĂN ĐIỆP A08305……

GIẢNG VIÊN:NGUYỄN TRUNG ĐỒNG

NIÊN HỌC:2007_2008

Page 2: Avr 8535

PHẦN I

TỔNG QUAN ĐỀ TÀI

I.1 Đặt vấn đềNgày nay, những ứng dụng của Vi điều khiển đã đi sâu vào đời sống sinh hoạt và sản xuất của con người. Thực tế hiện nay là hầu hết các thiết bị điện dân dụng hiện nay đều có sự góp mặt của Vi Điều Khiển và vi xử lí . Ứng dụng vi điều khiển trong thiết kế hệ thống làm giảm chi phí thiết kế và hạ giá thành sản phẩm đồng thời nâng cao tính ổn định của thiết bị và hệ thống. Ta sẽ thiết kế mạch đo và hiển thị nhiệt độ dựa trên những ứng dụng của vi điều khiển avr 8535 

I.2 Mục tiêu đề tài­ Nghiên cứu về AVR và các vấn đề liên quan như thi công mạch nạp, các chương trình phần mềm hỗ trợ lập trình. ­ Lập trình chip   avr at90s8535  sử dụng bộ ADC 10 bit để lấy mẫu tín hiệu(nhiệt độ) và hển thị lên bộ led 7 thanh. 

Page 3: Avr 8535

PHẦN II

Tổ chức phần cứng

1.SƠ LƯỢC VI ĐIỀU KHIỂN AVR AT 90S8535

AT 90S8535 là  bộ  vi  điều khiển CMOS 8 bit  tiêu thụ  điện năng thấp dựa trên kiến trúc RISC. Với  công nghệ  này cho phép các lệnh thực thi chỉ trong một chu kì nhịp xung, vì thế tốc độ xử lý dữ liệu có thể đạt đến 1 triệu lệnh trên giây ở tần số 1 Mhz. vi điều khiển này cho phép người thiết kế có thể tối ưu hoá mức độ tiêu thụ năng lượng mà vẫn đảm bảo tốc độ xử lí.  Phần cốt  lõi  của AVR kết hợp tập lệnh phong phú  về  số lượng với 32 thanh ghi làm việc đa năng. Toàn bộ 32 thanh ghi đều được nối trực tiếp với ALU (Arithmetic Logic Unit), cho phép truy cập 2 thanh ghi độc lập bằng một chu kì xung nhịp. Kiến trúc đạt được có tốc độ xử lý nhanh gấp 10 lần vi điều khiển dạng CISC thông thường .

2 .Đặc tính của AVR AT 90S8535Được chế tạo theo kiến trúc RISC, hiệu cao và điện năng tiêu thụ thấp Bộ lệnh gồm 118 lệnh, hầu hết đều thực thi chỉ trong một chu kì xung nhịp 32x8 thanh ghi làm việc đa dụng. 8KB Flash ROM lập trình được ngay trên hệ thống o Giao diện nối tiếp SPI cho phép lập trình ngay trên hệ thống o Cho phép 1000 lần ghi/xoá Bộ EEPROM 512 byte . o Cho phép 100.000 ghi/xoá. Bộ nhớ SRAM 512 byte. Bộ biến đổi ADC 8 kênh, 10 bit . 32 ngõ I/O lập trình được 

Page 4: Avr 8535

Bộ truyền nối tiếp bất đồng bộ vạn năng UART Vcc=2.7V đến 6V Tốc độ làm việc: 0 đến 8 Mhz Tốc độ xử lí lệnh đến 8 MIPS ở 8 MHz nghĩa là 8 triệu lệnh trên giây Bộ đếm thời gian thực (RTC) với bộ dao động và chế độ đếm tách biệt 2 bộ Timer 8 bit và 1 bộ Timer 16 bit với chế độ so sánh và chia tần số tách biệt và chế độ bắt mẫu. Ba kênh điều chế độ rộng xung PWM Có đến 13 interrupt ngoài và trong Bộ định thời Watchdog lập trình được. tự động reset khi treo máy Bộ so sánh tương tựBa chế độ ngủ : chế độ rỗi (Idle), tiết kiệm điện ( Power save) và chế độ Power DownSau đây là bảng so sánh những đặc tính giữ AT90S8535 với họ AT89C51. 

Bảng 1:Đặc tính 

     AT90S8535 AT89C51 Flash ROM ­ 8K Byte có thể lập trình trên hệ thống ­4 KB EEPROM ­ 512 byte ­ Không RAM nội 

Page 5: Avr 8535

­ 512 byte SRAM ­ 128 byte RAM Bộ Timer ­2 bộ timer 8 bit ­ 1 bộ timer 16 bit ­ 1 bộ watchdog timer ­ 2 bộ timer 16 bit Bộ ADC ­ 1 bộ ADC 8 kênh 10 bit ­ Không Giao thức truyền nối tiếp chủ/tớ­ Có ­ Không Bộ PWM ­ Bộ điều chế PWN 8­,9­và 10­bit ­ Không Bộ truyền nối tiếp UART ­ Có 2 chế độ­ Có 4 chế độBộ so sánh tương tự­Có ­ Không Nguồn ngắt (Interrupt) ­ Có 17 nguồn ngắt ­ Có 6 nguồn ngắt Tần số hoạt động ­ 0 ÷8 Mhz 

Page 6: Avr 8535

­ (0 ÷24 Mhz)/12 Điện áp tiêu thụThạch anh 4 Mhz , VCC=3V: ­ Trạng thái tích cực : 6.4mA ­ Trạng thái rỗi : 1.9mA ­ Trạng Power Down : < 1 uA Thạch anh 12Mhz, VCC=3V: ­Trạng thái tích cực : 20 mA ­Trạng thái rỗi : 5 mA­Trạng Power Down : < 40 uA Giá thành ( tại thị trường Việt Nam)­ 110.000đ­ 17.000đQua bảng so sánh có thể thấy rằng AT908535 không những thừa kế những ưu điểm của AT89C51 mà còn có những đặc tính mới khá hoàn thiện, hiệu suất cao hơn hẳn và tốc độ xử lí cao gấp nhiều. Tuy nhiên một trở ngại lớn đó là giá thành còn khá cao (có thể một phần do chưa được sử dụng rộng rãi).

Page 7: Avr 8535

3.Ý nghĩa các chân của AT 908535

-VCC:Điện áp nguồn nuôi.- GND: Nối mass.- PortA (PA7…PA0): PortA là Port vào/ ra hai hướng 8 bit, các chân của Port có các điện trở nối lên nguồn dương. Các chân ra của Port A có thể cho phép dòng điện 20mA đi qua và trực

Page 8: Avr 8535

tiếp điều khiển LED hiển thị.Khi các chân PA0 đến PA7 là các lối vào và được đặt xuống mức thấp từ bên ngoài, chúng sẽ là nguồn dòng nếu các điện trở nối lên nguồn dương được kích hoạt. Các chân của cổng A ở vào trạng thái có điện trở cao khi tín hiệu reset ở mức tích cực hoặc ngay cả khi không có tín hiệu xung clock.Port A cung cấp các đường địa chỉ/ dữ liệu vào/ ra hoạt động theo kiểu đa hợp kênh khi dùng bộ nhớ SRAM ở bên ngoài.Port còn có thêm chức năng là ngõ vào tương tự và đưa đến bộ chuyển đổi AD.Các Port B, C, D tương tự như Port A.

- RESET: Lối vào đặt lại. Bộ vi điều khiển sẽ được đặt lại khi chân này ở mức thấp trong hơn 50ns, các xung ngắn hơn không tạo ra tín hiệu đặt lại.

- XTAL1: Lối vào bộ khuếch đại đảo và lối vào mạch tạo xung nhịp bên trong.- XTAL2: Lối ra bộ khuếch đại đảo.XTAL1 và XTAL2 lần lượt là lối vào và lối ra của một bộ khuếch đại đảo. Bộ khuếch đại này được bố trí để làm bộ tạo dao động trên chip. Một bộ tinh thể thạch anh hoặc một bộ cộng hưởng gốm có thể được sử dụng. Để điều khiển bộ vi điều khiển từ một nguồn xung nhịp bên ngoài, chân XTAL2 để trống, còn chân XTAL1 được nối với bộ dao động bên ngoài.

- ICP: Là chân vào cho chức năng bắt tín hiệu vào bộ timer/ counter1.

- OC1B: Là chân ra PWM, ngõ ra so sánh của timer/ counter1.

_ ALE: Là chân tín hiệu cho phép chốt địa chỉ được dùng khi truy nhập bộ nhớ ngoài. Xung ALE được dùng để chốt 8 bit địa chỉ thấp vào một bộ chốt địa chỉ trong chu kỳ truy cập bộ nhớ thứ nhất. Sau đó các chân AD0-7 được dùng làm các

Page 9: Avr 8535

đường dữ liệu trong chu kỳ truy nhập bộ nhớ thứ hai.

4.Tổ chức vùng nhớ AVR AT90S8535

Các bộ vi xử lí AVR có cấu trúc Harvard nghĩa là có bộ nhớ chương trình và bộ nhớ dữ liệu riêng.

Bộ nhớ chương trình là loại bộ nhớ Flash, 16 bit, có dung lượng 8Kbyte. Bộ nhớ chương trình được truy nhập theo từng chu kỳ đồng hồ và một lệnh được ghi vào thanh ghi lệnh.

Bộ nhớ chương trình, bên cạnh các lệnh lưu trữ, còn chứa các vectơ ngắt ở đầu địa chỉ(xem phần ngắt). Chương trình hiện tại sẽ bắt đầu ở phía bên kia vùng cho các vectơ ngắt.

Bộ nhớ dữ liệu: có 4 vùng khác nhau Vùng tập thanh ghi: gồm 32 thanh ghi có độ rộng 8 bit. Vùng các thanh ghi vào ra: gồm 64 thanh ghi vào ra, mỗi

thanh ghi có độ rộng 8 bit. Các thanh ghi này thực chất là một phần của bộ nhớ SRAM trên chip và cũng có thể được truy nhập như bộ nhớ SRAM có địa chỉ từ $20 -> $5F hoặc như các thanh ghi I/O có địa chỉ từ $00 -> $3F. Hầu hết các thanh ghi này được trao đổi như các thanh ghi I/O chứ không phải như SRAM.

+ Vùng nhớ SRAM bên trong(RAM đa dụng): gồm 512 byte. Bộ nhớ SRAM sử dụng cho ngăn xếp cũng như để lưu trữ các biến.

+ Vùng EEPROM: gồm 512 byte và được truy nhập theo bản đồ bộ nhớ tách biệt. Địa chỉ bắt đầu của bộ nhớ EEPROM là $0000. Bộ nhớ này có thể được đọc/ghi bằng phần mềm.

Hoạt động của các bộ phận trên AVR AT90S8535 + Bộ nhớ EEPROM: được truy nhập qua các thanh ghi truy

nhập EEPROM, cụ thể là: thanh ghi địa chỉ EEPROM [EEAR], thanh ghi dữ liệu EEPROM [EEDR] và thanh ghi

Page 10: Avr 8535

điều khiển EEPROM [EECR], Để truy nhập EEPROM ta phải trải qua các trình tự sau: cho địa chỉ cần truy nhập (vào thanh ghi địa chỉ) -> đọc hay ghi (vào thanh ghi điều khiển) -> dữ liệu cần đọc hoặc ghi (qua thanh ghi dữ liệu).

+ Bộ nhớ SRAM: được truy nhập bằng cách sử dụng nhiều lệnh truy nhập dữ liệu trực tiếp hoặc gián tiếp qua các con trỏ X,Y,Z. Thời gian truy nhập bộ nhớ SRAM bằng 2 chu kỳ xung đồng hồ.

+ Các cổng vào ra (I/O): đều có 3 địa chỉ vào ra đi kèm, địa chỉ vào ra được cần đến để đặt cấu hình cho các bit riêng biệt thành lối vào hoặc thành lối ra; địa chỉ khác được cần đến để xuất ra dữ liệu tới các bit (hoặc tất cả) được đặt cấu hình thành lối ra và địa chỉ thứ 3 được cần đến để đọc dữ liệu từ các chân (hoặc tất cả) được cấu hình thành lối vào.

+ Bộ truyền nhận UART: Việc truyền dữ liệu được khởi tạo bằng cách ghi dữ liệu vào thanh ghi dữ liệu I/O UART [UDR].

Sơ đồ bộ nhận UART

Page 11: Avr 8535

Bộ so sánh Analog: so sánh các giá trị điện áp ở lối vào AIN0 (AC+) và AIN1 (AC-) với nhau. Nếu như điện áp lối vào AIN0 lớn hơn AIN1 thì lối ra bộ so sánh Analog (AC0) được đặt lên mức "1". Lối ra này có thể sử dụng cho bộ Timer/Counter 1 để Trigger hoặc xoá ngắt bộ so sánh Analog.

Sơ đồ bộ so sánh Analog

Page 12: Avr 8535

+ Bộ biến đổi tương tự sang số (ADC): với độ phân giải 10 bit/1 kênh. Bộ biến đổi ADC có bộ

dồn kênh 8 lối vào, mỗi lối có thể dẫn riêng lẻ tới ADC. Thời gian thực hiện cho tất cả các chuyển đổi từ 65 ms đến 260 ms. Bộ biến đổi ADC được

thực hiện qua 4 thanh ghi ADMUX, ADCSR, ADCH, ADCL và có thể hoạt động trong 2 chế độ:

quá trình biến đổi được người dùng khởi động (Single Conversion Mode), quá trình biến đổi diễn

ra liên tục (Free Running). Sơ đồ khối bộ ADC

Page 13: Avr 8535

+ Bộ định thời Watchdog: điều khiển được và được sử dụng làm thiết bị đánh thức trong các trường hợp phần mềm bị rơi vào một hoặc một số vòng lặp vô tận hoặc trong trường hợp việc thực thi

chương trình bị mắc lỗi. Bộ định thời Watchdog có một lối ra và có khả năng đặt lại bộ điều khiển.

Mạch định thời Watchdog timer được giữ nhịp từ bộ dao động RC riêng biệt trên chip. Bằng cách

điều khiển mạch chia tần số Watchdog timer, khoảng thời gian reset mạch Watchdog có thể được điều chỉnh. có khả năng thay đổi độ rộng đến một giá trị tuỳ ý. Tuy nhiên, mạch PWM dựa trên bộ

đếm.

Page 14: Avr 8535

+ Hoạt động điều biến độ rộng xung PWM: cho phép tạo ra một tín hiệu số có tần số cố định. Độ rộng của tín hiệu được thay đổi phù hợp với yêu cầu, có khả năng thay đổi độ rộng đến một giá trị tuỳ ý. Tuy nhiên, mạch PWM dựa trên bộ đếm thì mức độ thay đổi chỉ có thể dài bằng độ phân giải

của bộ đếm. + Cấu trúc ngắt: Bộ vi điều khiển AVR AT90S8535

có nguồn ngắt phong phú. Khả năng ngắt chu cấp cho hầu hết các thiết bị ngoại vi sao cho chương

trình chính không cần phải thường xuyên kiểm tra các thiết bị này.

+ Chế độ tiết kiệm năng lượng: Bộ điều khiển AVR có khả năng giảm năng lượng tiêu thụ để chuyển

sang chế độ ngủ: bit SE trong MCUCR được đặt và lệnh SLEEP được thực thi. Nếu một ngắt đã cho

Page 15: Avr 8535

phép xuất hiện trong khi MCU đang trong trạng thái ngủ thì MCU sẽ thức dậy thực thi đoạn

chương trình ngắt và lại tiếp tục trạng thái ngủ kể từ lệnh SLEEP tiếp theo. Nội dung các thanh ghi, SRAM và bộ nhớ I/O vẫn được giữ nguyên. Có 3

chế độ ngủ: Idle, Power-down, Power save.

5.Sơ đồ khối AVR AT90S8535 ghép nối tất cả các thiết bị

PHẦN III

TỔ CHỨC PHẦN MỀMChuong trinh dung AT mega 8535 do nhiet do

;Dung ATmega8535 do nhiet do bang LM35 tai cong ADC.0 - PA.0;Hien thi ket qua nhiet do bang 4 led 7 thanh ;cong PB (chon led) va PC (du lieu hien thi so)

Page 16: Avr 8535

; Chon thiet bi ..device AT90S8535

; Dinh nghia cac cong va thanh ghi; I/O Register Definitions.equ SREG =$3F.equ GIMSK =$3B.equ GIFR =$3A.equ TIMSK =$39 .equ TIFR =$38 .equ MCUCR =$35.equ TCCR0 =$33.equ TCNT0 =$32.equ TCCR1 =$30.equ TCNT1 =$2F.equ OCR1A =$2E.equ OCR1B =$2D.equ PORTA =$1B.equ DDRA =$1A.equ PINA =$19.equ PORTB =$18.equ DDRB =$17.equ PORTC =$15.equ DDRC =$14.equ ACSR =$08 .equ ADMUX =$07.equ ADCSR =$06.equ ADCH =$05.equ ADCL =$04.equ SPDR =$0F ;Dinh nghia cac bien dung trong chuong trinh; Variable Declarations.def temp = r16

Page 17: Avr 8535

.def isrsreg = r18

.def isrtemp1 = r19

.def isrtemp2 = r20

.def cseg = r21

.def seg0 = r22

.def seg1 = r23

.def seg2 = r24

.def seg3 = r25

;Dinh nghia dia chi ngat cua ADC.equ ADCCaddr=$00E

.cseg ; CODE segment.

;Interrupt Vectors.org 0 rjmp init ;Reset.org ADCCaddr ;ADC Conversion Complete

rjmp ADC_int;-----------------------------------------------;Han khoi tao;Initialization

init: ldi r16,$FF ;Cho phep 8 cong du lieu PB out DDRB,r16 ;Cong PB dung de giai ma dia chi led

ldi r16,$00;Khoi tao cong PBout PORTB,r16 ;Dua 0x00 ra cong PB

ldi r16,$FF ;Cho phep 8 cong du lieu PC out DDRC,r16out PORTC, r16 ;Cong PC hien thi du lieu

ldi r16,$01;Cong PA.0 dung de nhan tin hieu ADCout PINA,r16

Page 18: Avr 8535

sei ;Cho phep ngatldi r18,$EF ;Khoi tao tin hieu giai ma dia chi led

;-----------------------------------------------;Vong lap vo hanloop:

cli ;Cam ngat ldi r16,$FE ;Khoi tao ngat ADC.0 che do thu congout ADCSR,r16ldi r16,$28;Cho phep che do sleep cua CPUout MCUCR,r16sei ;Cho phep ngatsleep ;CPU nghi cho den khi ngat ADC hoan thanh

;-----------------------------------------------;Hien thi so lieu ra cac led 7 thanh;Ma hien thi led hang tram: 0111.0111 = 0x77;Ma hien thi led hang chu : 0011.1011 = 0x3B;Ma hien thi led hang chuc: 0001.1101 = 0x1D;Ma hien thi chu C : 0000.1110 = 0x0E;

cpi r18,$0E ; So sanh ma hien thi voi 0x0Ebreq ganr18 ; Neu =0x0E thi gan tro lai 0xEFrjmp continous ; Neukhong bang 0x0E thi tiep tuc

ganr18:ldi r18,$EF ; Gan tro lai gia tri r18 = 0xEF

continous:lsr r18 ; Dich thanh ghi r18 sang phai 1 bit cpi r18,$77 ; Neu r18 = 0x77 hien thi led hang trambreq ganseg0 ; Gan du lieu hang tram cho led hang tramcpi r18,$3B ; Neu r18 = 0x3B hien thi led hang chucbreq ganseg1 ; Gan du lieu hang chuc cho led hang chuccpi r18,$1D ; Neu r18 = 0x1D hien thi du lieu hang don

vibreq ganseg2 ; Gan du lieu hang don vi cho led don vicpi r18,$0E ; Neu r18 = 0x0E hien thi chu cai C

Page 19: Avr 8535

breq ganseg3 ; Gan du lieu chu C cho led cuoi cung

ganseg0:mov r16,seg0 ; Lay du lieu hang tramrjmp loopsub

ganseg1:mov r16,seg1 ; Lay du lieu hang chucrjmp loopsub

ganseg2:mov r16,seg2 ; Lay du lieu hang don virjmp loopsub

ganseg3:mov r16,seg3 ; Lay du lieu cho chu Crjmp ganchuC

loopsub:ldi r17, 1 ; Lay r17 = 1 de so sanhclc ; Xoa co nhosub r16, r17brcs ganso0 ; neu r16<1sub r16, r17brcs ganso1 ; neu r16<2sub r16, r17brcs ganso2 ; neu r16<3sub r16, r17brcs ganso3 ; neu r16<4sub r16, r17brcs ganso4 ; neu r16<5sub r16, r17brcs ganso5 ; neu r16<6sub r16, r17brcs ganso6 ; neu r16<7sub r16, r17brcs ganso7 ; neu r16<8sub r16, r17

Page 20: Avr 8535

brcs ganso8 ; neu r16<9sub r16, r17brcs ganso9 ; neu r16=9rjmp ganchuC

ganso0:cpi r18,$77brne ganso00ldi r19,$00rjmp exit ;Khong hien thi so 0

ganso00:ldi r19,$3F ;So 0rjmp exit

ganso1:ldi r19,$06;So1rjmp exit

ganso2:ldi r19,$5B; ;So 2rjmp exit

ganso3:ldi r19,$4F; ;So 3rjmp exit

ganso4:ldi r19,$66; ;So 4rjmp exit

ganso5:ldi r19,$6D; ;So 5rjmp exit

ganso6:ldi r19,$7D; ;So 6rjmp exit

ganso7:ldi r19,$07;So 7rjmp exit

ganso8:

Page 21: Avr 8535

ldi r19,$7F;So 8rjmp exit

ganso9:ldi r19,$6F;So 9rjmp exit

ganchuC:ldi r19,$39;ChuC

exit:out PORTB,r18 ;Vi tri led can hien thiout PORTC,r19 ;Du lieu can hien thi

;-----------------------------------------------;Ham tao tre de duy tri thoi gian hien thi cho tung leddelay:

ldi temp, $30d:

dec temp ;Giam temp = temp -1brne d ;Neu chua bang 0 thi quay lai nhan d:

;----------------------------------------------- rjmp loop ;Tro lai vong lap vo han

;-----------------------------------------------;Ham chuyen doi so ADC 10 bit thanh so 4 chu so he thap phan;Ham nay thuc hien khi xay ra ngat ADC - cap nhat gia tri moi cua ADC;Gia tri lon nhat cua 10 bit la 1024;Gia tri Vref = 2.048 V;Qui doi gia tri 10bit x 2 = 1024 x 2 = 2048;Voi LM35 thi 10mv/1C;Vay gia tri gan dung la 10 dec <-> 1C

ADC_int:cli ;Xoa ngat he thongin r0,ADCL ;Doc gia tri byte thap cua ADC (2bit)

Page 22: Avr 8535

in r1,ADCH ;Doc gia tri byte cao cua ADC (8bit)clc ;Xoa co nhoadd r0,r0 ;Nhan doi gia tri r0adc r1,r1 ;Nhan doi gia tri r1 co nho (r1:r0 11 bit)

;Convert and display value for output;Start value taken to be in r1:r0

clr r4 ;r4 chua gia tri hang ngandc1a:mov r2,r0 ;Lay gia tri byte thap

mov r3,r1 ;Lay gia tri byte cao n x 256 ldi r16,$e8 ;Lay gia tri 232 = 1000 - 3x256 sub r2,r16 ;Gia tri byte thap tru di 232 ldi r16,$3 ;lay gia tr 3 sbc r3,r16 ;Gia tri byte cao tru di 3 - C brcs dc1b ;Neu r1:r0 < 1000 nhay den dc1b inc r4 ;Neu r1:r0 > 1000 thi tang them r4 mov r0,r2 ;ket qua r1:r0 - 1000 luu vao r0 mov r1,r3 ;ket qua r1:r0 - 1000 luu vao r1 rjmp dc1a ;Tiep tuc lay r1:r0 - 1000dc1b: mov seg0,r4 ;Luu gia tri hang ngan vao seg0

clr r4 ;r4 chua gia tri hang tramdc2a:mov r2,r0 ;r1:r0 -100

mov r3,r1 ldi r16,100 ;Lay gia tri 100 sub r2,r16 ;r0 - 100 clr r16 ;Xoa r16 sbc r3,r16 ;r1 - C brcs dc2b ;Neu r1:r0 < 100 inc r4 ;Neu r1:r0 > 100 tang them r4 mov r0,r2 ;Luu gia tri r1:r0 - 100 mov r1,r3 rjmp dc2a ;Tiep tuc tru 100dc2b: mov seg1,r4 ;Luu gia tri hang tram vao seg1

clr r4 ;r4 chua gia tri hang chuc

Page 23: Avr 8535

dc3a:mov r2,r0 ;r1:r0 -10 ldi r16,10 ;Lay gia tri 10 sub r2,r16 ;r0 - 10 brcs dc3b ;Neu r0 < 10 inc r4 ;Neu r0 > 10 tang them r4 mov r0,r2 ;Luu r0- 10 rjmp dc3a ;tiep tuc tru 10dc3b: mov seg2,r4 ;Luu gia tri hang chuc

mov seg3,r0 ;luu gia tri hang don vi

sei ;Cho phep ngat he thongreti ;Ket thuc ngat tro ve chuong trinh