![]() |
|||||
|
Pelatihan
Dasar Mikrokontroller
Microcontroller Kits Simple
Mikrokontroller 89s51 Trainer
|
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
|
Programmer Lesson 1:
|
|||