www.pudn.com > sounder.rar > sounder.asm
;**********************************************************************
;* ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ *
;* P0.0 ´ 1 20 Ã P0.1 DCLK *
;* P1.7 ´ 2 19 Ã P0.2 DOUT *
;* P1.6 ´ 3 18 Ã P0.3 DEN *
;* P1.5 ´ 4 17 Ã P0.4 BEEP *
;* GND ´ 5 16 Ã P0.5 *
;* X2 ´ 6 87LPC76X 15 Ã VCC *
;* X1 ´ 7 14 Ã P0.6 *
;* SIGOUT P1.4 ´ 8 13 Ã P0.7 *
;* A4052 P1.3 ´ 9 12 Ã P1.0 TXD *
;* B4052 P1.2 ´ 10 MCS-51 11 Ã P1.1 SIGIN *
;* ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ *
;* *
;**********************************************************************
;
;*************************************************************************
;
; ³£Êý¶¨Òå
;
;*************************************************************************
BAUDRATE EQU 0C4H ; C4 = 30us * 334 M/S = 0.01002M ;E8 = 4800, F4 = 9600, FA = 19200, FD = 38400, FE = 57600, FF = 115200
TIMEL EQU 0E7H ; ¶¨Ê±Æ÷ 0 ʱ¼ä³£Êý 25us SIGOUT = 40KHZ
TIMEH EQU 0E7H ; ;
TXHEAD EQU 40H ;
TXEND EQU 56H ; TX FORMAT : $YCMTW,-XX.X,C,XX.X,F(CR)
MAINDISP EQU 30H ;
TEMPHEAD EQU 36H ;
PLUSN EQU 28H ;
OFFSET EQU 08H
;
;*************************************************************************
;
; ¼Ä´æÆ÷¶¨Òå
;
;*************************************************************************
P0M2 DATA 085H ; P0·½Ê½¼Ä´æÆ÷2
P0M1 DATA 084H ; P0·½Ê½¼Ä´æÆ÷1
;
P1M1 DATA 091H ; P1·½Ê½¼Ä´æÆ÷1
P1M2 DATA 092H ; P1·½Ê½¼Ä´æÆ÷2
P2M1 DATA 0A4H ; P2·½Ê½¼Ä´æÆ÷1
P2M2 DATA 0A5H ; P2·½Ê½¼Ä´æÆ÷2
;
;
AUXR1 DATA 0A2H ;
IEN0 DATA 0A8H ;
IEN1 DATA 0E8H ;
IP0 DATA 0B8H ;
IP0H DATA 0B7H ;
IP1 DATA 0F8H ;
IP1H DATA 0F7H ;
;
PT0AD DATA 0F6h ; P0Êý¾ÝÊäÈë½ûÄÜ
PWS DATA 0D0H ;
WDCON DATA 0A7H ; ¿´ÃŹ·¿ØÖƼĴæÆ÷
WDRST DATA 0A6H ; ¿´ÃŹ·¸´Î»¼Ä´æÆ÷
;
PWMCON0 DATA 0DAH ; PWM ¿ØÖƼĴæÆ÷0
PWMCON1 DATA 0DBH ; PWM ¿ØÖƼĴæÆ÷1
CNSW0 DATA 0D1H ; PWM¼ÆÊýÆ÷Ó³Ïó¼Ä´æÆ÷0
CNSW1 DATA 0D2H ; PWM ¼ÆÊýÆ÷Ó³Ïó¼Ä´æÆ÷1
CPSW0 DATA 0D3H ; PWM ±È½ÏÓ³Ïó¼Ä´æÆ÷0
CPSW1 DATA 0D4H ; PWM ±È½ÏÓ³Ïó¼Ä´æÆ÷1
CPSW2 DATA 0D5H ; PWM ±È½ÏÓ³Ïó¼Ä´æÆ÷2
CPSW3 DATA 0D6H ; PWM ±È½ÏÓ³Ïó¼Ä´æÆ÷3
CPSW4 DATA 0D7H ; PWM ±È½ÏÓ³Ïó¼Ä´æÆ÷4
;
ADCON DATA 0C0H ; A/D ¿ØÖÆ
; ENADC BIT ADCON.7 ; A/DʹÄÜλ
; ADCS BIT ADCON.3 ; Æô¶¯×ª»»
; ADCI BIT ADCON.4 ; ת»»½áÊø
DAC0 DATA 0C5H ; A/D ½á¹û
;
; EC1 BIT IEN1.5
; EC2 BIT IEN1.2
;
CMP1 DATA 0ACH ; ±È½Ï¿ØÖƼĴæÆ÷1
CMP2 DATA 0ADH ; ±È½Ï¿ØÖƼĴæÆ÷2
;
;*************************************************************
;
; ¹¤×÷Äڴ涨Òå
;
;*************************************************************
BITST DATA 20H
TXREADYOK BIT BITST.0
KEYHITOK BIT BITST.1
TXWORKOK BIT BITST.2
SCANKEYOK BIT BITST.3
TIME1SOK BIT BITST.4
BEEPOK BIT BITST.5
DS1820OK BIT BITST.6
TEMPONEOK BIT BITST.7
BITSS DATA 21H
TEMPCFOK BIT BITSS.0
;
;
DITCON DATA 30H
DITCONA DATA 31H
DITCONB DATA 32H
DITCONC DATA 33H
DITCOND DATA 34H
HICON DATA 35H
ERRORCONH DATA 3EH
ERRORCONL DATA 3FH
;
;
;*************************************************************
;
; Òý½Å¶¨Òå
;
;***************************************************************
DCLK BIT P0.1 ;
DOUT BIT P0.2 ;
DEN BIT P1.3 ;
BEEP BIT P1.4 ;
SIGIN BIT P1.1 ;
SIGOUT BIT P1.4 ;
A4052 BIT P1.3 ;
B4052 BIT P1.2 ;
;
;*************************************************************
;
; ÖжÏÏòÁ¿Çø
;
;**************************************************************
ORG 0000H
LJMP START
;
ORG 0003H
RETI; IT0IT
;
ORG 00BH
LJMP INTT0
;
ORG 0013H
RETI; LJMP IT0IT
;
ORG 001BH
LJMP INTT1
;
ORG 0023H
RETI;LJMP TXINT
;
ORG 02BH
RETI
;
ORG 0033H
RETI
;
ORG 003BH
RETI
;
ORG 0043H
RETI; LJMP CP2IT
;
ORG 004BH
RETI
;
ORG 0053H
RETI
;
ORG 005BH
RETI;LJMP ADIT
;
ORG 0063H
RETI; LJMP CP1IT
;
ORG 0073H
RETI
;******************************************************************
;
; ϵͳ³õʼ»¯
;
;*******************************************************************
ORG 100H
START: CLR SIGOUT ;
MOV SP, #60H ;
MOV WDRST, #1EH ; ¿´ÃŹ·³õʼ»¯
MOV WDRST, #0E1H ;
MOV WDCON, #13H ; 20-45ms
;
ANL P0M1, #11100001B ; P0.5(LCD1) P0.4(LCD2) P0.0 P0.1 P0.2 P0.3
ORL P0M2, #00011110B ; ΪÉÏÀÊä³ö
;
ANL P1M1, #11101111B ; P1.4(DP)
ORL P1M2, #00010000B ; ΪÉÏÀÊä³ö
;
CLSMEM: MOV R0, #20H ;
MOV R1, #40H ;
CLSMEM1: MOV @R0, #00H ;
INC R0 ;
DJNZ R1, CLSMEM1 ;
;
MOV PCON, #80H ;
MOV AUXR1, #01100000B ; BOI = 1
MOV TMOD, #00100010B ; ¶¨Ê±Æ÷ 0 ×÷·½Ê½2 (8BIT),¶¨Ê±Æ÷1¹¤×÷·½Ê½2(8×Ô¶¯×°ÔØ)
MOV SCON, #01010000B ; ´®Ðпڹ¤×÷·½Ê½1 8BIT UART
MOV TCON, #00000101B ;
;
MOV TH0, #TIMEL ;
MOV TL0, #TIMEH ; 20ms
MOV TH1, #BAUDRATE ;
MOV TL1, #BAUDRATE ;
MOV IEN0, #00100000B ; EBO, ET1, ET0, EX0
MOV IEN1, #00110000B ; EC1, EAD, EC2
MOV IP0, #01010000B ; T1, BOD, CP1, CP2 = 00H
MOV IP0H, #01011010B ; EX0, EX1 = 00H
MOV IP1, #00000011H ; T0 = 10H
MOV IP1H, #00000011H ; XXXX = 11H
SJMP INIT
;
ERROR: NOP
LJMP START ;
;
NOP ;
INIT: NOP ;
SETB ET0 ;
SETB ET1 ;
SETB EA ;
MOV PSW, #00H ;
LJMP MAIN ;
;
;**********************************************************
; ¶¨Ê±Æ÷0ÖжϷþÎñ
;**********************************************************
INTT0: CPL SIGOUT ;
INC R6 ;
RETI ;
;**********************************************************
; ¶¨Ê±Æ÷1ÖжϷþÎñ
;**********************************************************
INTT1:; INC DPTR ;
INC DITCON ;
RETI ;
;
;**********************************************************
; A/DÖжϷþÎñ
;**********************************************************
ADIT: RETI ;
;
CP2IT: RETI ;
;
BODIT: RETI ;
;
;**********************************************************
; ´®¿ÚÖжÏ
;**********************************************************
TXINT: PUSH ACC ;
PUSH PSW ;
MOV PSW, #10H ;
JBC RI, RINT ;
JBC TI, TINT ;
RTI1: SETB REN ;
POP PSW ;
POP ACC ;
RETI ;
;
TINT: JNB TXWORKOK, RTI1 ;
MOV A, @R0 ;
MOV SBUF, A ;
INC R0 ;
CJNE R0, #TXEND, RTI1 ;
CLR TXWORKOK ;
SJMP RTI1 ;
;
RINT: SJMP RTI1 ;
;
;
;**********************************************************
; Ö÷³ÌÐò
;**********************************************************
MAIN: LCALL WDT ;
LCALL SWD ;
LCALL TESTDIT ;
LCALL HEX2BCD1 ;
; LCALL ERRORP ;
;
MOV DITCONA, A ;
LCALL DISPLAY ;
;
LCALL DELAY100MS ;
; LCALL DELAY100MS ;
; LCALL DELAY100MS ;
; LCALL DELAY100MS ;
LJMP MAIN ;
;
;**********************************************************
;**********************************************************
;**********************************************************
;×Ó³ÌÐòÇø
;
SWA: CLR A4052 ;
CLR B4052 ;
RET ;
;
SWB: SETB A4052 ;
CLR B4052 ;
RET ;
;
SWC: CLR A4052 ;
SETB B4052 ;
RET ;
;
SWD: SETB A4052 ;
SETB B4052 ;
RET ;
;
;
TESTDIT: CLR SIGOUT ;
; MOV DPTR, #0000H ;
MOV R6, #00H ;
MOV DITCON, #00H ;
SETB TR0 ;
CJNE R6, #PLUSN, $ ;
CLR TR0 ;
MOV HICON, #00H ;
SETB TR1 ;
MOV ERRORCONL,#00H ;
MOV ERRORCONH,#00H ;;
TESTLOOP: SETB SIGIN ;
NOP ;
JB SIGIN, TESTHICON ;
MOV HICON, #00H ;
; MOV A,ERRORCONL ;
; ADD A,#01H ;
; MOV ERRORCONL,A ;
; MOV A,ERRORCONH ;
; ADDC A,#00H ;
; MOV ERRORCONH,A ;
MOV A,DITCON
CLR C ;
SUBB A,#0E0H ;
JC TESTLOOP ;
MOV A,#00H ;
RET
; LJMP TESTLOOP ;
;
TESTHICON: INC HICON ;
CLR C ;
MOV A, HICON ;
SUBB A, #32H ;
JNC TESTHIEND ;
CLR C
MOV A,DITCON ;
SUBB A,#0F0H
JC TESTLOOP ;
MOV A,#00H
RET
; LJMP TESTLOOP ;
;
TESTHIEND: MOV ERRORCONL,#00H ;
MOV ERRORCONH,#00H ;
TESTHIEND0: JNB SIGIN, TESTHIEND1 ;TESTLOOP ;
MOV A,ERRORCONL ;
ADD A,#01H ;
MOV ERRORCONL,A ;
MOV A,ERRORCONH ;
ADDC A,#00H ;
MOV ERRORCONH,A ;
CLR C ;
SUBB A,#080H ;
JC TESTHIEND0 ;
MOV A,#00H ;
RET ;
TESTHIEND1: CLR TR1 ;
; MOV R5, #01H ;
;TESTRRC: MOV A, DPH ;
; CLR C ;
; RRC A ;
; MOV DPH, A ;
; MOV A, DPL ;
; RRC A ;
; MOV DPL, A ;
; DJNZ R5, TESTRRC ;
MOV A, DITCON ;
CLR C ;
RRC A ;
CLR C
; RRC A
CLR C ;
CJNE A, #32H, TESTOUT ;
TESTOUT: JC TESTRET ;
CJNE A, #64H, TESTOUT1 ;
TESTOUT1: JC TESTRET1 ;
ADD A, #OFFSET+02H ;
RET ;
;
TESTRET: ADD A, #OFFSET ;
RET ;
;
TESTRET1: ADD A, #OFFSET+01H ;
RET
;
;
ERRORP: MOV R0, A ;
CLR C ;
SUBB A, B ;
JC ERRORP1 ;
SUBB A, #02H ;
JC ERRORPR ;
MOV A,B ;
RET ;
ERRORPR: MOV A,R0 ;
RET ;
ERRORP1: CLR C ;
MOV A,B ;
SUBB A,R0 ;
SUBB A,#02H ;
JC ERRORPR ;
MOV A,B ;
RET
;
;**********************************************************
; DISPLAY
;**********************************************************
DISPLAY: MOV A, #02H ;
LCALL DISPBCD ;
MOV A, DITCONA ;
SWAP A ;
ANL A, #0FH ;
LCALL DISPBCD ;
MOV A, DITCONA ;
ANL A, #0FH ;
LCALL DISPBCD ;
MOV A, #01H ;
LCALL DISPBCD ;
RET ;
;
;
;**********************************************************
; BCD DISPLAY
;**********************************************************
DISPBCD: MOV R2, #08H ;
MOV DPTR, #DISPTAB ;
MOVC A, @A + DPTR ;
DISPBCD1: CLR DCLK ;
RRC A ;
MOV DOUT, C ;
SETB DCLK ;
DJNZ R2, DISPBCD1 ;
RET ;
;
;
DISPTAB:
DB 81H, 0F3H, 49H, 61H, 33H, 25H
;0 1 2 3 4 5
DB 05H, 0F1H, 01H, 21H, 0FFH
;6 7 8 9
;
;
;**********************************************************
; µ¥×Ö½Ú 16 ½øÖÆ×ª BCD
;**********************************************************
HEX2BCD1: MOV B, #064H ; 16 ½øÖÆ -> BCD
DIV AB ; B = A % 100
MOV R7, A ; R7 = °ÙλÊý
MOV A, #0AH ;
XCH A, B ;
DIV AB ; B = A % B
SWAP A ;
ORL A, B ;
RET ;
;
;
;**********************************************************
; Ë«×Ö½Ú 16 ½øÖÆ×ª BCD
; R2 = HI HEX R3 = LOW HEX
; R4 = HI BCD R5 = MI BCD R6 = LOW BCD
;**********************************************************
HEX2BCD2: CLR A ;
MOV R6, A ;
MOV R4, A ;
MOV R5, A ;
MOV R7, #10H ;
HEX2BCD21: MOV A, R3 ;
RLC A ;
MOV R3, A ;
MOV A, R2 ;
RLC A ;
MOV R2, A ;
MOV A, R6 ;
ADDC A, R6 ;
DA A ;
MOV R6, A ;
MOV A, R5 ;
ADDC A, R5 ;
DA A ;
MOV R5, A ;
MOV A, R4 ;
ADDC A, R4 ;
MOV R4, A ;
DJNZ R7, HEX2BCD21 ;
;
MOV A, R4 ;
MOV R2, A ;
MOV A, R5 ;
SWAP A ;
ORL A, R6 ;
MOV R3, A ;
RET ;
;
;
;**********************************************************
; µ¥×Ö½Ú BCD ת 16 ½øÖÆ
;**********************************************************
BCD2HEX1: MOV B, #10H ; ·ÖÀëʮλºÍ¸öλ
DIV AB ;
MOV R7, B ;
MOV B, #0AH ; ½«Ê®Î»×ª»»³ÉÊ®Áù½øÖÆ
MUL AB ;
ADD A, R7 ; °´Ê®Áù½øÖƼÓÉϸöλ
RET ;
;
;
;**********************************************************
; Ë«×Ö½Ú BCD ת 16 ½øÖÆ
; R2 = HI R3 = LOW
;**********************************************************
BCD2HEX2: MOV A, R3 ; µÍ×Ö½Úת»» BCD
LCALL BCD2HEX1 ;
MOV R3, A ;
MOV A, R2 ; ¸ß×Ö½Úת»» BCD
LCALL BCD2HEX1 ;
MOV B, #64H ; ³Ë 100
MUL AB ;
ADD A, R3 ; ºÍµ××Ö½Ú°´Ê®Áù½øÖƼÓ
MOV R3, A ;
CLR A ;
ADDC A, B ;
MOV R2, A ;
RET ;
;
;
;**********************************************************
; Ë«×Ö½Ú¶þ½øÖÆÎÞ·ûºÅÊý³Ë·¨
; Èë¿ÚÌõ¼þ£º±»³ËÊýÔÚR2¡¢R3ÖУ¬³ËÊýÔÚR6¡¢R7ÖС£
; ³ö¿ÚÐÅÏ¢£º³Ë»ýÔÚR2¡¢R3¡¢R4¡¢R5ÖС£
; Ó°Ïì×ÊÔ´£ºPSW¡¢A¡¢B¡¢R2¡«R7 ¶ÑÕ»ÐèÇó£º £²×Ö½Ú
;**********************************************************
MULHEX2: MOV A, R3 ; ¼ÆËãR3³ËR7
MOV B, R7 ;
MUL AB ;
MOV R4, B ; Ôݴ沿·Ö»ý
MOV R5, A ;
MOV A, R3 ; ¼ÆËãR3³ËR6
MOV B, R6 ;
MUL AB ;
ADD A, R4 ; ÀÛ¼Ó²¿·Ö»ý
MOV R4, A ;
CLR A ;
ADDC A, B ;
MOV R3, A ;
MOV A, R2 ; ¼ÆËãR2³ËR7
MOV B, R7 ;
MUL AB ;
ADD A, R4 ; ÀÛ¼Ó²¿·Ö»ý
MOV R4, A ;
MOV A, R3 ;
ADDC A, B ;
MOV R3, A ;
CLR A ;
RLC A ;
XCH A, R2 ; ¼ÆËãR2³ËR6
MOV B, R6 ;
MUL AB ;
ADD A, R3 ; ÀÛ¼Ó²¿·Ö»ý
MOV R3, A ;
MOV A, R2 ;
ADDC A, B ;
MOV R2, A ;
RET ;
;
;
;**********************************************************
; ÑÓʱ 100 MS
;**********************************************************
DELAY100MS: MOV R5, #0F0H ;
MOV R4, #00H ;
DELAY100LOOP: DJNZ R4, DELAY100LOOP ;
LCALL WDT ;
DJNZ R5, DELAY100LOOP ;
RET ;
;
;
;**********************************************************
; ÑÓʱ 100 uS
;**********************************************************
DELAY100US: MOV R5, #32H ;
DJNZ R5, $ ;
RET ;
;
;
;**********************************************************
; Çå¿´ÃŹ·
;**********************************************************
WDT: MOV WDRST,#1EH ;
MOV WDRST,#0E1H ;
RET ;
;
;
;
;****************************************************************************
; Calculate CRC-8 Values. Uses The CCITT-8 Polynomial, Expressed As
; X^8 + X^5 + X^4 + 1
;****************************************************************************
CRC8CAL: PUSH ACC ;
MOV R7, #08H ; Number Bits In Byte
;
CRC8LOOP1: XRL A, B ; Calculate CRC
RRC A ; Move To Carry
MOV A, B ; Get The Last CRC Value
JNC CRC8LOOP2 ; Skip If Data == 0
XRL A, #18H ; Update The CRC Value
;
CRC8LOOP2: RRC A ; Position The New CRC
MOV B, A ; Store The New CRC
POP ACC ; Get The Remaining Bits
RR A ; Position The Next Bit
PUSH ACC ; Save The Remaining Bits
DJNZ R7, CRC8LOOP1 ; Repeat For 8 Bits
POP ACC ;
RET ;
;
;
; ORG 0FCE0H
; DB "COPYRIGHT BY CHAI YE QIAO"
; ORG 0FD0H
; DB 0C8H
; ORG 0FD1H
; DB 00H; NO
;80=ONE
;00=TWO
;
END