BÀI 9: LẬP TRÌNH CHUYỂN ĐỔI TÍN HIỆU TƯƠNG TỰ VÀ TÍN
HIỆU SỐ
TP. HỒ CHÍ MINH, 2023
Chương trình tham khảo lập trình điều khiển ADC int_0804 equ p3.5 //kiểm tra xem có ngắt từ ADC hay không rd_0804 eqeu 3.7 //đọc dữ liệu từ ADC wr_0804 equ 3.6 //ghi dữ liệu vào ADC datum equ p0 //chân đầu vào wet equ p2 //chân đầu ra bien_1 equ r0 //khai báo bien_1 là thanh ghi r0 lưu trữ dữ liệu org 0000h //địa chỉ bắt đầu chương trình jmp ct_chinh //nhảy đến nhãn ct_chinh thực hiện chương trình org 0023h //thực hiện ngắt nguồn jmp ct_ngat_nt //nhảy đến nhãn ct_ngat_nt để ngắt nguồn org 0030h //thực hiện thao tác chính ct_chinh: mov ie,#90h //cài đặt để cho phép ngắt từ ADC mov tmod,#20h //cài đặt chế độ 8-bit tự động nạp đè mov th1,#-6 //gán giá trị -6 vào thanh ghi th1 mov scon,#50h //gán giá trị 50 vào thanh ghi scon setb tr1 //thiết lập tr1 lên 1 mov dptr,#hi //gán giá trị hi vào thanh ghi dptr mov bien_1,#35 //gán giá trị 35 vào bien_1 main: clr wr_0804 //xóa cờ wr_080 setb wr_0804 //thiết lập cờ wr_0804 lên 1 H: Jb int_0804,H //kiểm tra nếu =1 thì nhảy tới H Clr rd_0804 // xóa cờ rd_0804 Mov r5,#30 //gán giá trị 30 vào thanh ghi r5 Mov bien_1,p1 //gán giá trị thanh ghi p1 vào bien_1 Mov sbuf, bien_1 //gán giá trị bien_1 vào thanh ghi sbuf Call decode //gọi chương trình decode H1: call show //gọi chương trình show Djnz r5,H1 // giảm r5 đi 1 đơn vị nếu khác 0 nhảy đến H1 Setb rd_0804 //thiết lập rd_0804 lên 1 Jmp main //nhảy đến main thực hiện vòng lặp Ct_ngat_nt: Clr ti //xóa cờ ti Reti //kết thúc nguồn Decode: Mov a,bien_1 //gán giá trị bien_1 vào thanh ghi a Mov b,#10 //gán giá trị 10 vào thanh ghi b Div ab //thực hiện phép chia cho thanh ghi a và b Mov 30h,a //lưu số hàng chục bien_1 Mov 31h,b //lưu số hàng đơn vi bien_1 Mov a,30h //gán giá trị 30h vào thanh ghi a Movc a,@a+dptr Mov 30h,a //mã 7 đoạn chuc bien_1 Mov a,31h Movc a,@a+dptr Mov 31h,a //mã 7 đoạn đơn vị bien_1 Show: Call decode //gọi chương trình con decode Mov wet,#11111101b Mov datum,31h //xuat ma 7 doan don vi bien_1 Call delay //tạo độ trễ Mov datum,#0ffh //tắt led chống lem Mov wet,#11111110b Mov datum,30h //xuat ma 7 doan chuc bien_1 Call delay //gọi chương trình con delay Mov datum,#0ffh //tắt led chống lem Ret Delay: Mov r3,#6 L1: mov r4,#250 Djnz r4,#$ Djnz r3,L1 Ret HI: Db 0c0h,0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h end chương trình tham khảm sử dụng ADC0809 start equ p3.3 //bắt đầu chương trình tại chân p3.3 ale equ p3.4 //chọn đường dữ liệu oe equ p3.0 //cho phép dữ liệu đầu ra eoc equ p3.2 //xác định khi quá trình chuyển đổi add0 equ p3.4 //truyền dữ liệu và nhận dữ liệu add1 equ p3.5 add2 equ p3.6 datum equ p0 //chân đầu vào wet equ p2 //chân đầu ra bien_1 equ p0 org 0000h mov dptr,#HI //gán giá trị hi vào thanh ghi dptr clr ale //xóa cờ ale clr start //xóa cờ start clr oe //xóa cờ oe setb eoc //thiết lập cờ eoc lên 1 mov p1,#00h //gán giá trị 00h vào p1 main: setb ale //thiết lập bit ale lên 1 setb add0 //thiết lập bit add0 lên 1 setb add1 setb add2 setb start //thiết lập bit start lên 1 clr ale //xóa cờ ale clr start //xóa cờ start H: jnb eoc,H //kiểm tra chân eoc có trạng thái ko nếu không nhảy đến nhãn H Set oe //thiết lập cờ oe lên 1 Clr oe //xóa cờ oe Setb eoc //thiết lập bit eoc lên 1 mov r5,#30 //gán giá trị 30 vào r5 mov bien_1,p1 //chuyển giá trị p1 vào bien_1 call decode //gọi hàm decode H1: call show //gọi hàm show Djnz r5,H1 //giảm giá trị r5 đi 1 đơn vị nếu r5 khác 0 nhảy đến H1 Jmp main //nhảy đến nhãn main Decode: MOV A,BIEN_1 //gán bien_1 vào A Mov B,#10 //gán 10 vào B Div AB //chia 2 giá trị thanh ghi A và B Mov 30h,A //gán A vào thanh ghi 30h Mov 31h,B //gán B vào thanh ghi B Mov A,30h //gán 30 vào thanh A Movc a,@a+dptr Mov 30h,a Mov a,31h Movc a,@a+dptr Mov 31h,a Show: Call decode //gọi hàm decode Mov wet,#11111101b Mov datum,31h //gán 31 vào datum Call delay //gọi hàm delay tạo độ trễ Mov datum,#0ffh //tắt led chống lem Mov wet,#11111110b Mov datum,30h //gán 30 vào datum Call delay Mov datum,#0ffh Ret H1: Db 0c0h,0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h Delay: Mov r3,#6 L1: mov r4,#250 Djnz r4,#$ Djnz r3,L1 Ret End