Tutorial
Microcontroller 8051 |
||||||
![]() |
||||||
Printing temperature data to dot matrix printer ( Download Assembly File : printer.zip
) ;=================================================== ; Print out temperature data each 60 second ; By: Triwiyanto ; www.mytutorialcafe.com ;=================================================== ;1.Use temperature sensor LM35 and comment_report: mov dptr,#Text_report againH: clr A movc a,@a+dptr cjne a,#'$',PrintH sjmp OutH PrintH: call Printchar inc dptr call delay sjmp againH OutH: ret ; comment_hour: mov dptr,#Text_hour againJ: clr A movc a,@a+dptr cjne a,#'$',PrintJ sjmp OutJ PrintJ: call Printchar inc dptr call delay sjmp againJ OutJ: ret ; comment_Temp: mov dptr,#Text_Temp againT: clr A movc a,@a+dptr cjne a,#'$',PrintT sjmp OutT PrintT: call printchar inc dptr call delay sjmp againT OutT: ret ; comment_name: mov dptr,#Text_name againN: clr A movc a,@a+dptr cjne a,#'$',PrintN sjmp OutN PrintN: call printchar inc dptr call delay sjmp againN OutN: ret ; PrintData_Temp: mov A,tenP call printchar mov A,oneP call printchar call printcoma mov A,fractionP call printchar call space call printpoint call printCelcius ret ; ADC: mov A,P2 mov dataadc,a ret ; convert: mov R1,#0c5h acall write_inst mov a,dataadc mov dptr,#data_ten movc a,@a+dptr MOV R5,A Add A,#30h mov R1,A acall write_data ; mov R1,#0c6h acall write_inst mov a,dataadc mov dptr,#data_one movc a,@a+dptr mov r6,a add A,#30h mov R1,A acall write_data ; mov R1,#0c8h acall write_inst mov a,dataadc mov dptr,#data_fraction movc a,@a+dptr mov r7,a add A,#30h mov R1,A acall write_data ret ; Print_DataConvert: call Convert_HextoBCD mov A,ten add A,#30h call printchar mov A,one add A,#30h call printchar mov A,fraction add A,#30h call printchar ret ; ;This Subrutine is to convert hex to BCD ; for example: 125 will be convert to ; hundred = 1, ten =2, one = 5 ; to get print out to printer dot matrix Convert_HextoBCD: mov B,#100 ; DIV AB ; mov ten,A ; mov A,B ; mov B,#10 ; DIV AB mov one,A mov fraction,B ret ; PrintDatahour: mov A,hour10 call printchar mov A,hour1 call Printchar call Printdoubledot mov A,minute10 call printchar mov A,minute1 call printchar call Printdoubledot mov A,second10 call printchar mov A,second1 call printchar call space call space ret ; scandisplay: mov r1,#08bh acall write_inst mov r1,second1 acall write_data ; mov r1,#08ah acall write_inst mov r1,second10 acall write_data ; mov r1,#088h acall write_inst mov r1,minute1 acall write_data ; mov r1,#087h acall write_inst mov r1,minute10 acall write_data ; mov r1,#085h acall write_inst mov r1,hour1 acall write_data ; mov r1,#084h acall write_inst mov r1,hour10 acall write_data sjmp scandisplay ; timerinterrupt: mov tl0,#0b0h mov th0,#03ch djnz counter20,endinterrupt mov counter20,#20 acall hourdigital endinterrupt: reti ; hourdigital: inc second mov a,#60 cjne a,second,updatedisplay acall printout mov second,#0 ; oneminute: inc minute mov A,#60 cjne A,minute,updatedisplay mov minute,#0 ; onehour: inc hour mov A,#24 cjne A,hour,updatedisplay mov hour,#0 ; updatedisplay: mov a,second mov b,#10 div ab mov second1,b mov second10,a mov a,minute mov b,#10 div ab mov minute1,b mov minute10,a mov a,hour mov b,#10 div ab mov hour1,b mov hour10,a ; mov a,#30h add a,second1 mov second1,a ; mov a,#30h add a,second10 mov second10,a ; mov a,#30h add a,minute1 mov minute1,a ; mov a,#30h add a,minute10 mov minute10,a ; mov a,#30h add a,hour1 mov hour1,a ; mov a,#30h add a,hour10 mov hour10,a ret ; Init_Timer: mov counter20,#20 mov counter60,#60 mov second,#0 mov hour,#0 mov minute,#0 mov TMOD,#00000001b mov tl0,#0b0h mov th0,#03ch setb ET0 setb EA setb TR0 ret ; Write_inst: Clr P1.0 Mov P0,R1 Setb P1.1 Acall delay Clr P1.1 ret ; Write_data: Setb P1.0 Mov P0,R1 Setb P1.1 Acall delay Clr p1.1 ret ; Printchar1: mov P2,A jb busy,$ setb strobe clr strobe acall delay setb strobe ret ; init_lcd: mov r1,#dispclr acall write_inst mov r1,#funcset acall write_inst mov r1,#dispon acall write_inst mov r1,#entrmod acall write_inst ret ; Enter: mov A,#0dh call printchar call delay mov A,#0ah call printchar ret ; Space: mov A,#' ' call printchar ret ; Printdoubledot: mov A,#':' call printchar ret ; Printcoma: mov A,#',' call printchar ret ; Printpoint: mov A,#'o' call printchar ret ; PrintCelcius: mov A,#'C' call printchar ret ; write1: mov dptr,#comment1 mov R3,#37 mov R1,#80h acall write_inst tls1: clr a movc a,@a+dptr mov R1,A inc dptr acall write_data djnz R3,tls1 ret ; write2: mov dptr,#comment2 mov R3,#21 mov R1,#0c0h acall write_inst tls2: clr a movc a,@a+dptr mov R1,A inc dptr acall write_data djnz R3,tls2 ret ; write3: mov dptr,#comment3 mov R3,#11 mov R1,#0c0h acall write_inst tls3: clr a movc a,@a+dptr mov R1,A inc dptr acall write_data djnz R3,tls3 ret ; write4: mov dptr,#comment4 mov r3,#4 mov r1,#080h acall write_inst tls4: clr a movc a,@a+dptr mov r1,a inc dptr acall write_data djnz r3,tls4 ; write5: mov dptr,#comment5 mov r3,#4 mov r1,#086h acall write_inst tls5: clr a movc a,@a+dptr mov r1,a inc dptr acall write_data djnz r3,tls5 ret ; comment1: db' Print Temp Data' comment2: db' Labcomputer ' comment3: db'Temp: , oC' comment4: db'hour:' comment5: db': :' Text_report: db'Temperature Measurement$' Text_hour: db'hour:$' Text_Temp: db'Temp:$' Text_name: db'Labcomputer$' ; data_ten: DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 DB 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2 DB 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3 DB 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 DB 3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 DB 4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5 DB 5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6 DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7 DB 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 DB 7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 DB 8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9 DB 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0 ; data_one: DB 0,0,0,1,1,1,2,2,3,3,3,4,4,5,5,5,6,6,7,7 DB 7,8,8,9,9,9,0,0,0,1,1,2,2,2,3,3,4,4,4,5 DB 5,6,6,6,7,7,8,8,8,9,9,0,0,0,1,1,1,2,2,3 DB 3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,0 DB 1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8 DB 9,9,0,0,0,1,1,1,2,2,3,3,3,4,4,5,5,5,6,6 DB 7,7,7,8,8,9,9,9,0,0,0,1,1,2,2,2,3,3,4,4 DB 4,5,5,6,6,6,7,7,8,8,8,9,9,0,0,0,1,1,1,2 DB 2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0 DB 0,0,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8 DB 8,8,9,9,0,0,0,1,1,1,2,2,3,3,3,4,4,5,5,5 DB 6,6,7,7,7,8,8,9,9,9,0,0,0,1,1,2,2,2,3,3 DB 4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,0 ; data_fraction: DB 0,9,8,8,7,6,5,5,4,3,2,1,1,0,9,8,7,7,6,5 DB 4,4,3,2,1,0,0,9,8,7,6,6,5,4,3,3,2,1,0,9 DB 9,8,7,6,5,5,4,3,2,2,1,0,9,8,8,7,6,5,5,4 DB 3,2,1,1,0,9,8,7,7,6,5,4,4,3,2,1,0,0,9,8 DB 7,6,6,5,4,3,3,2,1,0,9,9,8,7,6,5,5,4,3,2 DB 2,1,0,9,8,8,7,6,5,5,4,3,2,1,1,0,9,8,7,7 DB 6,5,4,4,3,2,1,0,0,9,9,7,6,6,5,4,3,3,2,1 DB 0,9,9,8,7,6,5,5,4,3,2,2,1,0,9,8,8,7,6,5 DB 5,4,3,2,1,1,0,9,8,7,7,6,5,4,4,3,2,1,0,0 DB 9,8,7,6,6,5,4,3,3,2,1,0,9,9,8,7,6,5,5,4 DB 3,2,2,1,0,9,8,8,7,6,5,5,4,3,2,1,1,0,9,8 DB 7,7,6,5,4,4,3,2,1,0,0,9,8,7,6,6,5,4,3,3 DB 2,1,0,9,9,8,7,6,5,5,4,3,2,2,1,0 end
|
Lesson 1: Lesson 2: |
|||||