Nếu có sử dụng bộ nhớ ngoài thì Port này được dùng để multiplex giữa địa chỉ phần thấp và data bus.. Ngoài chức năng I/O, các chân port còn có các chức năng đặc biệt : P3.0 RXD Dữ liệu n
Trang 1CHƯƠNG I:
Giới thiệu V IC sử dụng Ề
1 Vi xử lý AT89C51:
Cấu tạo chân
Tùy theo khả năng (về kinh tế, kỹ thuật, …) mà các nhà sản xuất các sản phẩm ứng dụng có thể chọn một trong 3 kiểu chân do ATMEL đưa ra
2.2 Sơ đồ khối
Trang 2 Mô tả sơ đồ chân : Sơ đồ chân của 8951 tương tự như 8051 (trình bày
sau ).
+ Port 0 : gồm các chân từ 32 -39 ( P0.0 đến P0.7 ) Port này có chức
năng kép Thông thường port này được dùng làm port I/O Nếu có sử dụng bộ nhớ ngoài thì Port này được dùng để multiplex giữa địa chỉ phần thấp và data bus.
+ Port 1 : gồm các chân từ 1 - 8 ( P1.0 - P1.7 ) Port này chỉ có chức
năng duy nhất là giao tiếp I/O.
+ Port 2 : gồm các chân từ 22 - 28 ( P2.0-P2.7 ) Đây cũng là port có
chức năng kép, ngoài chức năng là port I/O , port 2 còn được dùng làm địa chỉ phần cao cho address bus
+ Port 3 : gồm các chân 10-17 ( P3.0-P3.7 ) Port này cũng có chức
năng kép Ngoài chức năng I/O, các chân port còn có các chức năng đặc biệt :
P3.0 RXD Dữ liệu nhận cho port nối tiếp P3.1 TXD Dữ liệu phát cho port nối tiếp
P3.6 /WR Xung ghi bộ nhớ dữ liệu ngoài P3.7 /RD Xung đọc bộ nhớ dữ liệu ngoài
Bảng 1-Bảng chức năng port 3
+ Chân /PSEN (Program Store Enable) : (chân 29 ) là tín hiệu tác động
mức thấp, có chức năng điều khiển truy xuất bộ nhớ ngoài, thường được nối với chân OE của ROM ngoài Khi thực thi chương trình thì chân /PSEN vẫn giữ ở tích cực mức thấp.
+ Chân /EA ( External access ) : ( chân 31) thường nối lên mức cao
(+5V) hoặc mức thấp (GND) Nếu ở mức cao, vi xử lý thực hiện chương trình từ ROM nội trong khoảng địa chỉ thấp (4KB) Nếu ở mức thấp, chương trình thi hành từ bộ nhớ mở rộng Nếu /EA nối xuống mức thấp,bộ nhớ bên trong chương trình sẽ bị cấm và chương trình thi hành từ bộ nhớ mở rộng.
+ Chân ALE ( Address Latch Enable ) : (chân 30 ) là tín hiệu dùng để
chốt địa chỉ byte thấp vào thanh ghi bên ngoài trong nữa chu kỳ đầu bộ nhớ, ở
Trang 3nữa sau chu kỳ bôï nhớ, các đường port 0 được dùng để xuất nhập dữ liệu Các xung nhịp của tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip.
+ Chân RST ( Reset) : Ngõ vào RST trên chân 9 là ngõ RESET của
VXL, chân này tác động ở mức cao Khi tín hiệu này được đưa lên mức cao ( trong ít nhất 2 chu kỳ máy) các thanh ghi bên trong sẽ được nhận các giá trị thích hợp để khởi động các hệ thống
+ Nguồn : 8951 và 8051 hoạt động với nguồn +5V DC ( chân 40 ) và
GND ( chân 20).
+ Bộ dao động trêân chip :
XTAL1 là đầu vào và đầu ra tương ứng của
bộ khuếch đại đảo được dùng làm bộ dao
động nội on-chip Có thể dùng thạch anh hay
bộ cộng hưởng ceramic đều được
Để lái vi điều khiển từ nguồn xung clock bên
ngoài, XTAL2 phải được để trống trong khi
XTAL1 nối đến nguồn lái Không có yêu cầu
gì về duty cycle nhưng phải chú ý đến thời
gian tối đa và tối thiểu của mức điện áp cao
cũng như mức điện áp thấp.
Tổ chức bộ nhớ chương trình :
AT89C51 tổ chức bộ nhớ thành những vùng
bộ nhớ riêng biệt cho chương trình và dữ liệu.
AT89C51 có 4K ROM nội và chỉ có 128
bytes bộ nhớ RAM Tuy nhiên bộ nhớ chương
trình và bộ nhớ dữ liệu có mở rộng lên đến 64
Kbyte.
Bộ nhớ RAM nội được tổ chức 2 vùng :
Vùng RAM : gồm các bank thanh ghi có địa chỉ từ 00H đến 1FH, RAM địa chỉ hoá từng bit có địa chỉ từ 20H-2FH
Vùng RAM đa dụng : có địa chỉ từ 30H-7FH
+ Các thanh ghi chức năng đặc biệt có địa chỉ từ 80H-FFH
+ Các từ trạng thái chương trình
Bit Ký hiệu Địa chỉ Chức năng
Trang 4PSW.4 RS1 D4H Bit 1 chọn thanh ghi PSW.3 RS0 D3H Bit 0 chọn thanh ghi
00:bank 0 01:bank 1 02:bank 2 03:bank 3
Không được địa chỉ hoá bit
Không được địa chỉ hoá bit Không được địa chỉ hoá bit Không được địa chỉ hoá bit
Trang 5Tóm tắt bộ nhớ dữ liệu trên chip.
Các cờ nhớ :
• CY (carry flag): cờ nhớ thường dùng cho các lẹânh số học Ngoài
ra nó còn có thể được xem như một thanh ghi 1 bit cho các lệnh luận lý thi hành trên bit.
• AC (auxiliary carry flag): cờ nhớ phụ được sử dụng khi cộng các số BCD.
• Flag 0 (bit F0) : cờ sử dụng chung dành cho người lập trình
• 0V (overlow flag) : cờ tràn được set khi có 1 phép toán đang thi hành bị tràn.
Các thanh ghi lệnh :
• Thanh ghi A (Accumulator): thanh ghi tích luỹ.
• Thanh ghi B : là thanh ghi đệm đa dụng có địa chỉ F0H
• Thanh ghi SP (Stack Pointer) : địa chỉ 81H chứa các địa chỉ của byte dữ liệu hiện hành trên đỉnh của ngăn xếp Con trỏ ngăn xếp được truy xuất trực tiếp bằng lệnh POP và PUSH.
• Data Pointer (DPTR) : được dùng để truy xuất bộ nhớ ngoài DPTR là một thanh ghi 16 bit và được phân ở các địa chỉ 82H (DPL-byte thấp) và 83H (DPH-byte cao).
Các thanh ghi Port :
P0 ở địa chỉ 80H.
P1 ở địa chỉ 90H.
P2 ở địa chỉ A0H.
P3 ở địa chỉ B0H.
Các thanh ghi này được địa chỉ hoá từng bit
Thanh ghi timer : vi xử lý có 2 bộ timer/counter 16 bit dùng cho việc
định thời hoặc đếm sự kiện.
Timer 0 : gồm 2 thanh ghi TL0 (8AH) và TH0 (8CH).
Timer 1 : gồm 2 thanh ghi TL1 (8AH) và TH1 (8CH).
Việc vận hành timer được set bởi thanh ghi TMOD (89H) và thanh ghi điều khiển TCON (88H) , thanh ghi này được địa chỉ hoá từng bit
Thanh ghi đệm SBUF : (99H) dùng để đệm data nối tiếp cho việc truyền và
nhận data.
TCON
Trang 6Thanh ghi SCON : (98H) được địa chỉ hoá từng bit, có chức năng điều
khiển port nối tiếp Thanh ghi SCON :
Thanh ghi ngắt IE : có 5 nguồn ngắt, và 2 mức ưu tiên ngắt Các ngắt
bị cấm sau khi reset hệ thống và được điều khiển, cho phép ngắt bởi thanh ghi
IP, các thanh ghi này được địa chỉ hoá từng bit Thanh ghi IE :
Thanh ghi ngắt ưu tiên IP : Điều khiển mức ngắt ưu tiên bằng cách set
bit tương ứng trong thanh ghi IP Thanh ghi này có 8 bit như sau :
Thanh ghi PCON : ở địa chỉ 87H chứa nhiều bit điều khiển (bảng
Bit Ký hiệu Ý nghĩa
7 SMOD Bit tăng tốc độ baud, nếu được set thì tốc độ
baud tăng gấp đôi trong các mod 1,2,3
3 GF1 Bit cờ đa dụng 1
2 GF0 Bit cờ đa dụng 0
1 DP Giảm công suất, được set để kích hoạt mod
giảm công suất, chỉ thoát khi reset.
0 IDL Mode chờ, set để hoạt node chờ, chỉ thoát khi
reset hệ thống.
Bảng tóm tắt các bit của thanh ghi PCON.
Trang 7TH0 Byte cao của timer 0 8CH Không
Các thanh ghi đặc biệt điều khiển truy xuất timer.
7 GATE 1 Bit mở cổng, khi lên 1, timer chỉ chạy khi
INT1 ở mức cao
1: chế độ đếm sự kiện.
4 M0 1 Bit0 chọn Mode hoạt động
1 M1 0 Bit1 chọn Mode hoạt động
0 M0 0 Bit 0 chọn Mode hoạt động
Bảng tóm tắt thanh ghi TMOD.
hiệu
Địa chỉ bit Mô tả(1= cho phép, 0= cấm)
IE.5 ET2 0ADH Cho phép ngắt timer 2 (8052) IE.4 ES 0ACH Cho phép ngắt port nối tiếp.
IE.2 EX1 0AAH Cho phép ngắt ngoài1.
IE.0 EX0 0A8H Cho phép ngắt ngoài 0.
Tóm tắt thanh ghi IE.
Trang 8Bit Ký hiệu Địa chỉ Mô tả
TCON.7 TF1 8FH Cờ báo tràn timer1 , đặt bởi phần cứng khi
tràn, được xoá bởi phần mềm hoặc phần cứng khi bộ timer xử lý đến chương trình phục vụ ngắt.
TCON.6 TR1 8EH Bit cho phép timer1 chạy Đặt xoá bởi phần
mềm khi timer chạy hoặc dừng.
TCON.5 TF0 8DH Cờ báo tràn timer 0.
TCON.4 TR0 8CH Bit cho phép timer 0 chạy
TCON.3 IE1 8BH Cờ ngắt 1 bên ngoài, đặt bởi phần cứng khi
phát hiện cạnh xuống ở INT1, xoá bằng phần mềm hoặc phần cứng khi timer chỉ đến chương trình phục vụ ngắt.
TCON.2 IT1 8AH Cờ kiểu ngắt 1 ngoài, được set hoặc xoá
bằng phần mềm bởi cạnh xuống hoặc mức thấp được kích hoạt bởi sự ngắt ngoài.
TCON 1 IE0 89H Cờ ngắt bên ngoài 0.
Bảng tóm tắt thanh ghi TCON.
hiệu
Địa chỉ bit Mô tả(1= cho phép, 0= cấm)
IP.5 PT2 0BDH Ưu tiên ngắt từ timer 2 (8052).
IP.4 PS 0BCH Ưu tiên ngắt từ port nối tiếp.
IP.3 PT1 0BBH Ưu tiên ngắt từ timer1.
IP.1 PT0 0B9H Ưu tiên ngắt từ timer 0.
Bảng tóm tắt thanh ghi IP.
hiệu
Địa chỉ bit Mô tả(1= cho phép, 0= cấm)
SCON.7 SM0 9FH Bit 0 của chế độ port nối tiếp.
Trang 9SCON.6 SM1 9EH Bit 1 của chế độ port nối tiếp SCON.5 SM2 9DH Bit 2 của chế độ port nối tiếp.
SCON.3 TB8 9BH Bit phát thứ 8, bit 9 được phát
trong Mode 2 và 3 hoặc để kiểm tra
SCON.2 RB8 9AH Bit thu thứ 8, bit 9 thu được ở
Mode 2 và 3 hoặc để kiểm tra.
Bảng tóm tắt thanh ghi chế độ port nối tiếp.
Chế độ lười
Trong chế độ lười, CPU rơi vào trạng thái “ngủ” trong khi tất cả thiết bị ngoại
vi vẫn còn tích cực Chế độ này được tạo ra bằng phần mềm Nội dung của RAM on-chip và giá trị của các SFR vẫn được giữ nguyên Kết thúc chế độ lười bằng cách kích hoạt một ngắt hoặc reset phần cứng.
Chú rằng khi kết thúc chế độ lười bằng cách reset phần cứng thì thông thường
vi điều khiển sẽ gọi lại chương trình mà nó vừa thoát, cho đến hai chu kỳ máy trước khi thuật toán reset chiếm quyền điều khiển Phần cứng cấm truy cập RAM nội trong trường hợp này nhưng không cấm truy cập đến các chân port,
do đó có thể xảy ra những trường hợp không mong muốn Để loại bỏ trường hợp này, lệnh ngay sau lệnh gọi chế độ lười không nên là lệnh ghi port hay ghi bộ nhớ ngoài.
2.8 Chế độ hạ nguồn
Trong chế độ hạ nguồn, bộ dao động ngừng, và lệnh gọi hạ nguồn là lệnh cuối cùng được thực thi RAM on-chip và SFR duy trì giá trị của nó cho đến khi kết thúc chế độ hạ nguồn
Kết thúc chế độ hạ nguồn chỉ bằng một cách duy nhất : reset phần cứng Reset sẽ tạo lại giá trị cho SFR nhưng không thay đổi nội dung của RAM on-chip Không nên reset trước khi Vcc phục hồi mức điện áp thông thường của nó và phải giữ đủ lâu để bộ dao động phục hồi và ổn định
2.9 Trạng thái của một số chân trong chế độ lười và chế độ hạ nguồn
Trang 102.10 Các thông số kỹ thuật
Trang 15Các đặc điểm chính :
Nguồn cung cấp +5V (MAX231/MAX239 dùng nguồn +5V và +12V).
Hạ nguồn công suất thấp nhưng vẫn có thể nhận (MAX223/MAX242).
Hỗ trợ chuẫn EIA/TIA-232E và V.28
Nhiều bộ nhận và phát.
Phát hiện đứt mạch đường truyền (MAX243).
Cấu tạo chân
Mô tả chức năng chân
Ta thấy rằng MAX232 cần có 4 tụ ngoài (mắc vào giữa C1+ và C1-, C2+ và C2-, V+ và nguồn dương, V- và đất để biến đổi điện áp từ 0V đến 5V thành
Trang 16-12V đến +12V phù hợp cho truyền thông theo chuẩn RS-232 Ngoài ra có 4 bộ
khuếch đại đảo nhằm chuyển từ mức TTL ra chuẩn RS-232 và ngược lại.
IC 75176 : dùng để giao tiếp nối tiếp bất đồng bộ
cân bằng sử dụng áp lệch giữa hai dây ( chân số 5,6 ), có
ngõ ra 3 trạng thái.
Input Enable Outputs
7 IC 555 : Khi cấp nguồn Vcc thì vcc=0 ( điện áp trên tụ C76 ở hình dưới ),
dẫn đến bộ so sánh 1 tác động → ngõ ra RS FF ( Flip Flop )=”0”, v0 ( áp ra tại chân số 3 ) mức cao, chân 7 cách ly, tụ C76 nạp từ Vcc qua R1, R2 tiến tới mức
Vcc Khi vcc=2/3Vcc bộ so sánh 2 tác động → ngõ ra RS FF =”1”, v0 ở mức thấp, transistor dẫn, v7 ≈ 0, tụ C76 xả qua R2 và chân số 7, vc giảm dần tiến tới 0.
Khi vc=1/3Vcc thì bộ so sánh 1 tác động → ngõ ra RS FF =0, v0 ở mức cao, chân số 7 hở, tụ C76 nạp từ Vcc qua R1và R2 Quá trình cứ tiếp tục lặp đi lặp lại tạo ra 1 chuỗi xung vuông với chu kỳ T=t1+t2, trong đó :
t1=0.693(C76)(R77+R77V) ( t1 : khoảng thời gian C76 nạp ) t2=0.693(C76)R77 ( t2 : Khoảng thời gian C76 xả )
MAX232
13
8
11 10
1 3 4 5 2
6
12 9
14
7
16 15 R1IN
R2IN
T1IN T2IN
C1+
C2+
C1-C2
-V+
V-R1OUT R2OUT
T1OUT
T2OUT
VCC GND
Trang 17LMC555
5
2 6
4
3 7
Out put Stage
3 : Output
1 : GND
7 : Dischar
R77V 10K
VCC
S2 START- PULSE
VCC
GND
T0
U6 LM555 2 5
3 7 6
TR CV
Q DIS THR
Trang 18CHƯƠNG II :
Định Dạng Và Ngăn Lỗi
I ĐỊNH DẠNG DỮ LIỆU ( Format Data):
1) Dữ liệu dạng nhị phân:
Với loại dữ liệu kiểu nhị phân, cú pháp trong Visual Basic:
Bit 0 = BitValue * ( 2^0 ) Bit 1 = BitValue * ( 2^1 ) Bit 7 = BitValue * ( 2^7 )
2) Dữ liệu dạng Text:
Khi cần gởi một thông báo hoặc một file text
Gởi text, chương trình sử dụng mã, mà nó ấn định một giá trị cho mỗi kí tự text Có nhiều loại mã, mã thông dụng nhất là mã ASCII ( American Standard Code for Information Exchange ), bao gồm 128 mã ứng với 7 bit data Bit thứ 8 nếu có sử dụng là bit 0 hoặc bit parity Mã ANSI ( American National Standards Institute ) sử dụng 256 mã Một loại định dạng khác là sử dụng 16 bit, cho phép 65.536 kí tự khác nhau
Trong chương trìng này tôi định dạng ASCII text, sử dụng điều khiển MSComm
3) ASCII Hex:
Kiểu text thì chọn chuỗi hoặc byte chứa chuỗi để phát Nhưng ta cũng có thể sử dụng text để phát dữ liệu nhị phân, bằng cách ấn định dữ liệu dưới dạng ASCII Hex Mỗi byte là một cặp ASCII code mà nó đại diện 2 kí tự Hex của byte
Khi máy tính nhận thì nó xử lý theo định dạng kiểu nhị phân
Ví dụ: khi ta phát kí tự A thì máy tính sẽ phát 41H ASCII hoặc 0100 0001B
Trong Visual Basic: A3H được viết là &HA3.Mã ASCII của “A” và
“3” là 41H, 33H.
II NGĂN LỖI TRONG THU PHÁT DATA:
Trong thu phát nối tiếp hay song song, ta không chắn chắn được rằng data truyền đến máy nhận luôn luôn đúng Lỗi sẽ xuất hiện trong khi truyền, lỗi này xuất hiện chủ yếu do nhiễu Để đảm bảo rằng thông tin
Trang 19truyền đi luôn đúng, có nhiều cách xử lý: bắt tay, bộ đệm, hỏi vòng và ngắt, sự phản hồi ( báo cho biết đã nhận được – ACK ), kiểm tra lỗi.
1) Dùng tín hiệu bắt tay:
Với tín hiệu bắt tay, bộ phát có thể được chỉ định khi nào thì phát data, và bộ nhận có thể chỉ định khi nào thì nhận data
Tín hiệu bắt tay thường dùng cho phần cứng, khi ngõ vào bộ nhận ở mức cao thì nó sẵn sàng nhận data, và bộ phát chờ tín hiệu này để phát data Ngõ vào bộ nhận có thể xuống mức thấp bất kỳ lúc nào, bộ phát phải biết điều này và ngưng phát, chờ cho đến khi nó lên mức cao và phát tiếp data còn lại.
Khi bắt tay bằng phần mềm, khi bộ nhận cần nhận data thì nó gởi đến bộ phát một mã mà được chỉ định trước Khi ngưng nhận thì nó cũng gởi một mã để dừng.
2) Bộ đệm:
Định nghĩa: Bộ đệm là một đơn vị của bộ nhớ được giao nhiệm vụ tạm thời lưu giữ các thông tin, đặc biệt là trong trường hợp phải đợi cho các bộ phận có tốc độ chậm đuổi theo kịp
Bộ đệm là một cách để bộ nhận chắc chắn rằng chúng không để mất data khi gởi đến chúng Và chúng cũng rất có ít cho bộ phát, khi data cần gởi thì nó đem ra bộ đệm và xử lý các chương trình khác bên trong bộ phát.
Bộ đệm có trong phần cứng hoặc phần mềm hoặc cả hai Trong PC bộ đệm có cả trong phần cứng lẫn phần mềm Khi bộ đệm phần cứng không đủ, PC sử dụng bộ đệm mềm, bộ đệm mềm tùy thuộc vào dung lượng bộ nhớ của PC.
3) Hỏi vòng và ngắt:
Những sự kiện xảy ra tại port nối tiếp bao gồm việc nhận và phát data, chuyển đổi tín hiệu bắt tay, gởi và nhận thông báo lỗi Có 2 cách để phát hiện những sự kiện này
Ngắt :Chương trình tự động nhảy đến một thủ tục khi phát hiện được sự kiện xảy ra Loại chương trình như thế gọi là
chương trình điều khiển theo sự kiện
Trong Visual Basic, sự kiện MSComm’s On Comm thực hiện chức năng này.
Hỏi vòng: thu/phát data tại thời điểm định sẵn, loại này không dùng ngắt phần cứng Tần số hỏi vòng tùy thuộc vào kích thước bộ đệm và tốc độ phát data Ví dụ khi kích
Trang 20thước bộ đệm nhận là 16 byte thời gian hỏi vòng là 16byte/giây Nó cũng có thể nhận hơn 16byte/giây nhưng lúc đó bộ đệm hoặc bị tràn hoặc bị mất data
Hỏi vòng thường áp dụng khi lượng dữ liệu ít, và nó cũng không yêu cầu ngắt phần cứng Thông thường ta dùng ngắt timer của hệ thống truy cập port.
4) ACK ( Acknowledgments )
Trong mạng kết nối nhiều thiết bị với nhau sử dụng chung một đường truyền thì sử dụng tín hiệu ACK rất có ít ACK thường định nghĩa dưới dạng byte Để truyền thông tin cho một node nào đó thì trước tiên Master gởi ACK đến node cần truyền, khi node nhận được ACK (của nó) thì nó báo cho master biết rằng master có thể gởi thông tin đến cho nó Tương tự khi node muốn gởi thông tin đến master.
5)Kiểm tra lỗi:
Bộ nhận có thể sử dụng việc kiểm tra lỗi để đảm bảo rằng data gởi tới luôn đúng Cách để kiểm tra lỗi là gởi byte data thừa ( redundant data) và kiểm tra byte lỗi ( hay byte thừa đó )
Cách đơn giản kiểm tra lỗi là dùng byte thừa, hoặc gởi 2 lần byte đó Bộ phát gởi mỗi thông tin 2 lần, bộ nhận phải nhận thông tin giống nhau thì thông tin truyền đi mới đảm bảo đúng Đương nhiên truyền theo cách này thì mất 2 lần thời gian truyền một byte Tuy nhiên nó rất có ít trong việc truyền thông tin khi có sự cố đặc biệt Phương pháp này thường ứng dụng trong điều khiển bằng tia hồng ngoại.
Một cách khác để kiểm tra lỗi là gởi 1 byte kiểm tra lỗi theo byte data, gọi kiểm tra Checksum Checksum là một phép toán được thực hiện trên biểu thức toán học và logic của một byte Kiểm tra checksum chỉ thực hiện trên một byte, khi truyền lượng thông tin lớn không thể dùng checksum để kiểm tra
Một loại kiểm tra lỗi khác là CRC ( cyclic redundacy code – mã dư tuần hoàn) Cách kiểm tra này thường dùng cho truyền lượng thông tin lớn Thường dùng trong Kermit, Xmodem, Ymodem và Zmodem
Trang 21CHƯƠNG III :
Phần Chương Trình Chi Tiết
A Chương Trình Trên Vi Xử Lý:
MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 1
DOS 8.0 (038-N) MCS-51 MACRO ASSEMBLER, V2.2
OBJECT MODULE PLACED IN VD.OBJ
ASSEMBLER INVOKED BY:
Trang 220022 E52F 16 S_LED: MOV A,2FH
0024 B4010F 17 CJNE A,#1,LED1
0027 14 18 DEC A
0028 120178 19 LCALL BCDTO7SEG002B 120173 20 LCALL OUTLED002E 74FE 21 MOV A,#0FEH
0030 12017D 22 LCALL C_LED
0033 120873 23 LCALL DELAY2MS
0036 E532 24 LED1: MOV A,32H
0038 B40003 25 CJNE A,#0,XUAT1003B 02004D 26 JMP LED2
003E 14 27 XUAT1: DEC A
0052 020064 35 JMP LED3
0055 14 36 XUAT2: DEC A
0056 120178 37 LCALL BCDTO7SEG
0059 120173 38 LCALL OUTLED005C 74FD 39 MOV A,#0FDH
005E 12017D 40 LCALL C_LED
Trang 23MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 2
LOC OBJ LINE SOURCE
007B E535 51 LED4: MOV A,35H
009E 120173 65 LCALL OUTLED
00A1 74EF 66 MOV A,#0EFH
00A3 12017D 67 LCALL C_LED
00A6 120873 68 LCALL DELAY2MS
00A9 E537 69 LED6: MOV A,37H
00AB B40003 70 CJNE A,#0,XUAT6
Trang 2400E0 120178 91 LCALL BCDTO7SEG
00E3 120173 92 LCALL OUTLED
00E6 747F 93 MOV A,#07FH
00E8 12017D 94 LCALL C_LED
00EB 120873 95 LCALL DELAY2MS
LOC OBJ LINE SOURCE
Trang 26LOC OBJ LINE SOURCE
Trang 2701A2 753102 181 SO1: MOV 31H,#2
01A5 12046F 182 LCALL NHAPSO
01A8 02046C 183 JMP EXITGM
01AB B40909 184 TTGM2: CJNE A,#9,TTGM3
01AE 753103 185 SO2: MOV 31H,#3
01B1 12046F 186 LCALL NHAPSO
01B4 02046C 187 JMP EXITGM
01B7 B40A09 188 TTGM3: CJNE A,#10,TTGM4
01BA 753104 189 SO3: MOV 31H,#4
01DE 753107 201 SO6: MOV 31H,#7
01E1 12046F 202 LCALL NHAPSO
01E4 02046C 203 JMP EXITGM
01E7 B41809 204 TTGM7: CJNE A,#24,TTGM8
01EA 753108 205 SO7: MOV 31H,#8
01ED 12046F 206 LCALL NHAPSO
01F0 02046C 207 JMP EXITGM
01F3 B41909 208 TTGM8: CJNE A,#25,TTGM9
Trang 2801F6 753109 209 SO8: MOV 31H,#9
01F9 12046F 210 LCALL NHAPSO
01FC 02046C 211 JMP EXITGM
01FF B41A09 212 TTGM9: CJNE A,#26,TTGM10
0202 75310A 213 SO9: MOV 31H,#10
0205 12046F 214 LCALL NHAPSO
0208 02046C 215 JMP EXITGM MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 5
LOC OBJ LINE SOURCE
023E B41B06 234 TTGM13: CJNE A,#27,TTGM14
0241 1206E1 235 PCA: LCALL CA
0244 02046C 236 JMP EXITGM
0247 B40406 237 TTGM14: CJNE A,#4,TTGM15
Trang 29024A 12075C 238 PET: LCALL ENTER
029E 753003 267 PENT: MOV 30H,#3
02A1 12077B 268 LCALL THE_END
02A4 02046C 269 JMP EXITGM
02A7 B40306 270 TTGM22: CJNE A,#3,TTGM23
MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 6
Trang 30LOC OBJ LINE SOURCE
02AA 1207A6 271 LCALL TEST0
Trang 32MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 7
LOC OBJ LINE SOURCE
Trang 3303AC 120717 370 LCALL RESETALL
03AF 1205CA 371 LCALL MTL_CDDL
LOC OBJ LINE SOURCE
03CA 1205E9 381 LCALL MTL_PR
03CD 02046C 382 JMP EXITGM
383 CHECKPRA:
Trang 3403E5 120717 391 LCALL RESETALL
03E8 120608 392 LCALL MTL_AM
Trang 35LOC OBJ LINE SOURCE
045D 1207D8 436 NOTOK: LCALL NOTOK1
0472 C0E0 446 PUSH ACC
0474 E539 447 MOV A,39H
Trang 37LOC OBJ LINE SOURCE
04DE 753E36 491 MOV 3EH,#36H
Trang 39MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 11
LOC OBJ LINE SOURCE
Trang 4005A7 75433E 575 MOV 43H,#3EH
05AA 22 576 RET
577 05AB 753A3E 578 MTL_CO: MOV 3AH,#3EH
LOC OBJ LINE SOURCE
05E2 754240 601 MOV 42H,#40H
05E5 754340 602 MOV 43H,#40H
05E8 22 603 RET