;************************************************************* ;* ;* TEPLOMER s komunikaci RS232 ;* ;* cidlo SMARTEC ;* ;************************************************************* ; ;****** Deklarace symbolickych jmen ****************** stovky equ 30h desitky equ 31h jednotky equ 32h desetiny equ 33h pocetmerl equ 34h pocetmerh equ 35h zmerenol equ 36h zmerenom equ 37h zmerenoh equ 38h pomstupl equ 39h pomstuph equ 3ah thh0 equ 3bh ;Bitove promenne namereno bit 0 dekada bit 1 merperiod bit 2 ;Hardware des bit p3.7 jed bit p3.5 dioda bit p1.5 ;Kalibracni konstanty posun0c equ 680 ;posun 0 stupnu celsia od zacatku merenisirky equ 2127 ;pocet desetin stupne na sirku 1 ;************ Zacatek programu *********************** org 0000h jmp Restart org 0003h jmp prerus_t0 org 001bh jmp prerus_t1 prerus_t0: push psw ;uschovej pouzivane push acc jnb tf0,prerust0a inc thh0 clr tf0 prerust0a: djnz pocetmerl,dale djnz pocetmerh,dale preust0b: jb merperiod,prerust0c mov zmerenol,tl0 ;uloz namerenou sirku mov zmerenom,th0 mov zmerenoh,thh0 mov pocetmerl,#16 ;delka mereni 0.1stupne mov pocetmerh,#0+1 ;korekce djnz pro 0 clr tr0 mov tl0,#0 ; mov th0,#0 mov tmod,#00100001b ;moduj T0 - cita kontinualne setb tr0 setb merperiod sjmp dale prerust0c: mov pocetmerl,#low(merenisirky) ;bude se merit sirka mov pocetmerh,#(high(merenisirky))+1 ;pocet cyklu clr tr0 mov tmod,#00101001b ;moduj T0 / citej jen pri gate mov pomstupl,tl0 ;uloz namerenou hodnotu 0.1stupne mov pomstuph,th0 mov tl0,#0 mov th0,#0 clr tf0 mov thh0,#0 setb tr0 clr merperiod setb namereno dale: cpl dekada ;dalsi dekada orl p1,#0fh ;zhasni jnb dekada,zobdes clr jed setb des mov a,jednotky orl a,#0f0h ;aby neovlivnil LED anl p1,a ;rozsvit jednotky sjmp konprerus zobdes: clr des setb jed mov a,desitky orl a,#0f0h ;aby neovlivnil LED anl p1,a ;rozsvit desitky konprerus: pop acc ;obnov pouziva v preruseni pop psw reti ;*********** Zacatek hlavniho programu ******************* Restart: mov sp,#70h mov desitky,#0h ;vsechny rady vypnuty mov jednotky,#0h mov desetiny,#0h mov p1,#0ah ;pri nepripojenem cidlu clr jed setb dioda mov pocetmerh,#1 mov pocetmerl,#1 Start: mov IE,#10000001b ; pouze peruseni od t0 mov TMOD,#00101001b ; t1 - 8bit s predvolbou ; t0 - 16bit s gate mov TCON,#00000001b ; int0 reaguje na sestupnou hranu mov th1,#0fdh; ; 19200 bd mov 87h,#10000000b ; smod =1 setb tr0 setb tr1 mov scon,#01010000b clr namereno ;nuluj priznak ukonceni mereni mov r2,#2 ignoruj: jnb namereno,ignoruj ;prvni mereni chybna clr namereno djnz r2,ignoruj Znovu: jnb namereno,znovu ;cekej az bude zmereno clr namereno ;************ Zacatek aritmetiky ******************** mov r2,#4 nasob: mov a,zmerenol ;nasob namerenou sirku 16x clr c rlc a mov zmerenol,a mov a,zmerenom rlc a mov zmerenom,a mov a,zmerenoh rlc a mov zmerenoh,a djnz r2,nasob call odcitej ;vypocti abs. pocet 0.1 stupnu clr c mov a,r2 subb a,#low(posun0c) ;koriguj posun nuly stupnu mov r2,a mov a,r3 subb a,#high(posun0c) mov r3,a cpl c mov dioda,c ;zobraz minus jc kladna clr a ;koriguj hodnotu minus ( 0-x) clr c subb a,r2 mov r2,a clr a subb a,r3 mov r3,a kladna: mov zmerenol,r2 ;preved na dekadicke cislo mov zmerenom,r3 mov zmerenoh,#0 mov pomstupl,#low(1000) ;vypocti stovky stupnu mov pomstuph,#high(1000) call odcitej mov stovky,r2 mov pomstupl,#low(100) ;vypocti desitky stupnu mov pomstuph,#high(100) call odcitej mov desitky,r2 mov a,zmerenol mov b,#10 div ab ;vypocti jednotky stupnu mov jednotky,a ;zbytek desetiny mov desetiny,b mov a,stovky jz pod100 ;pres 100 je chyba mov desitky,#0eh ;zobrazuj t mov jednotky,#0eh mov desetiny,#0eh pod100: ;*********Seriova komunikace************************ vysilani: mov a,#20h ;vysli znamenko jb dioda,neminus mov a,#'-' neminus:call vysznak mov a,desitky ;vysli desitky stupnu call vyscislo mov a,jednotky call vyscislo mov a,desetiny call vyscislo mov a,#13 call vysznak ;konec prenosu CR jmp znovu vyscislo: add a,#30h ;koriguj na ASCII vysznak: mov sbuf,a ;vysli jnb ti,$ ;cekej na vyslani clr ti ret odcitej: mov r2,#255 ;delit odcitanim mov r3,#255 ;v r2,3 vysledek odcitej1: inc r2 cjne r2,#0,odcitej2 inc r3 odcitej2: mov a,zmerenol clr c subb a,pomstupl mov zmerenol,a mov a,zmerenom subb a,pomstuph mov zmerenom,a mov a,zmerenoh subb a,#0 mov zmerenoh,a jnc odcitej1 mov a,pomstupl add a,zmerenol mov zmerenol,a mov a,pomstuph addc a,zmerenom mov zmerenom,a clr a addc a,zmerenoh mov zmerenoh,a ret ;********* Konec programu **************** end