|
发表于 2007-11-13 22:01:00
|
显示全部楼层
.macro SBICLK ; load Z pointer
SBI ICDATA,CLK
.endm
.macro CBICLK ; load Z pointer
CBI ICDATA,CLK
.endm
.macro SBIRST ; load Z pointer
SBI ICDATA,RST
.endm
.macro CBIRST ; load Z pointer
CBI ICDATA,RST
.endm
.macro table ; load Z pointer
ldi ZL,low(@0*2) ; low
ldi ZH,high(@0*2) ; high
.endm
.INCLUDE "M16DEF.INC"
.EQU SD = PA7
.EQU CLK = PA5
.EQU RST = PA3
.EQU VCC = PA2
.EQU GND = PA3
.EQU ICDATA = PORTA
.EQU ICIN = PINA
.EQU ICDDR = DDRA
.EQU ICLAN = 0X40
.DEF datal = R16
.DEF datah = R17
.DEF TTL = R18
.DEF TTH = R19
.DEF TEMP1 = R20
.DEF TEMP2 = R21
.DEF TEMP3 = R22
.DEF UBDAT = R23
.DEF BBIT = R24
.DEF ICSD = R25
.equ BIT0 = 0 ; Port D Input Pins bit 0
.equ BIT1 = 1 ; Port D Input Pins bit 1
.equ BIT2 = 2 ; Port D Input Pins bit 2
.equ BIT3 = 3 ; Port D Input Pins bit 3
.equ BIT4 = 4 ; Port D Input Pins bit 4
.equ BIT5 = 5 ; Port D Input Pins bit 5
.equ BIT6 = 6 ; Port D Input Pins bit 6
.equ BIT7 = 7 ; Port D Input Pins bit 7
.cseg
.ORG 0x00
rjmp Reset ; Reset handle
; rjmp CLK_INT ; INT0 handle
; rjmp RST_INT ; INT1 handle
; rjmp ICP_INT ; Input Capture1 Interrupt
; rjmp OC1_INT ; Output Compare1 Interrupt
; rjmp OVF1_INT ; Overflow1 Interrupt
; rjmp OVF0_INT ; Overflow0 Interrupt
; rjmp RX_END ; UART Receive Complete
; rjmp UDR_EMP ; UART Data Register Empty
; rjmp TX_END ; UART Transmit Complete
; rjmp AC_INT ; Analog Comparator
.ORG 0x10
Reset:
LDI TEMP1,LOW(RAMEND) ;initialize stack
OUT SPL,TEMP1
LDI TEMP1,HIGH(RAMEND)
OUT SPH,TEMP1
LDI TEMP1,0x00
OUT DDRA,TEMP1
OUT DDRB,TEMP1
OUT DDRC,TEMP1
OUT DDRD,TEMP1
OUT PORTA,TEMP1
OUT PORTB,TEMP1
OUT PORTC,TEMP1
OUT PORTD,TEMP1
SBI ICDDR,CLK
SBI ICDDR,RST
CBI ICDDR,SD
CBI ICDATA,RST
CBI ICDATA,CLK
SBI ICDATA,SD
CLR TEMP1
OUT DDRD,TEMP1
SER TEMP1
OUT PORTD,TEMP1
SBI PORTC,6
SBI PORTC,7
CLR TEMP1
OUT UCSRB,TEMP1
OUT UCSRA,TEMP1
LDI TEMP2,0xa6
OUT UCSRC,TEMP2
LDI TEMP2,0x0b
OUT UBRRL,TEMP2
OUT UBRRH,TEMP1
LDI TEMP2,0x08
OUT UCSRB,TEMP2
LOOP:
; RCALL READIC1
SBIc PIND,2
rjmp pp2
LDI R16,5
RCALL DELAY_M
PP1: SBIS PIND,2
RJMP PP1
RCALL INITIC
RCALL READIC1
pp2:
SBIc PINC,6
rjmp PP4
LDI R16,5
RCALL DELAY_M
PP3: SBIS PINC,6
RJMP PP3
RCALL INITIC
RCALL READIC2
PP4:
SBIc PINC,7
rjmp pp6
LDI R16,5
RCALL DELAY_M
PP5: SBIS PINC,7
RJMP PP5
RCALL INITIC
RCALL READIC3
pp6:
SBIc PIND,3
rjmp pp8
LDI R16,5
RCALL DELAY_M
PP7: SBIS PIND,3
RJMP PP7
RCALL INITIC
RCALL READIC4
pp8:
rjmp LOOP
INITIC:
SBI PORTA, 0
SBI DDRA, 0
LDI R16, 170
DEC R16
BRNE PC-1
LDI R16, 170
DEC R16
BRNE PC-1
RET
ENDIC: CBI PORTA, 0
RET
;*******************************************************************
READIC1:
LDI XL,0X60
LDI XH,0X00
SBIRST
RCALL DELAY
SBICLK
RCALL DELAY
CBICLK
RCALL DELAY
CBIRST
RCALL DELAY
CLR TEMP1
LOOPBAY1:
CLR TEMP2
CLR ICSD
LOOPBIN1:
LSR ICSD
SBIC ICIN,SD
SUBI ICSD,0x80
SBICLK
RCALL DELAY
CBICLK
RCALL DELAY
INC TEMP2
CPI TEMP2,8
BRCS LOOPBIN1
ST X+,ICSD
INC TEMP1
CPI TEMP1,ICLAN
BRCS LOOPBAY1
RJMP UBSR
;*********************************************************
READIC2:
LDI XL,0X60
LDI XH,0X00
SBIRST
RCALL DELAY1
SBICLK
RCALL DELAY1
CBICLK
RCALL DELAY1
CBIRST
RCALL DELAY1
CLR TEMP1
LOOPBAY2:
CLR TEMP2
CLR ICSD
LOOPBIN2:
LSR ICSD
SBIC ICIN,SD
SUBI ICSD,0x80
SBICLK
RCALL DELAY1
CBICLK
RCALL DELAY1
INC TEMP2
CPI TEMP2,8
BRCS LOOPBIN2
ST X+,ICSD
INC TEMP1
CPI TEMP1,ICLAN
BRCS LOOPBAY2
RJMP UBSR
;*********************************************************
READIC3:
LDI XL,0X60
LDI XH,0X00
SBIRST
RCALL DELAY2
SBICLK
RCALL DELAY2
CBICLK
RCALL DELAY2
CBIRST
RCALL DELAY2
CLR TEMP1
LOOPBAY3:
CLR TEMP2
CLR ICSD
LOOPBIN3:
LSR ICSD
SBIC ICIN,SD
SUBI ICSD,0x80
SBICLK
RCALL DELAY2
CBICLK
RCALL DELAY2
INC TEMP2
CPI TEMP2,8
BRCS LOOPBIN3
ST X+,ICSD
INC TEMP1
CPI TEMP1,ICLAN
BRCS LOOPBAY3
RJMP UBSR
READIC4:
LDI XL,0X60
LDI XH,0X00
SBIRST
RCALL DELAYA
SBICLK
RCALL DELAYA
CBICLK
RCALL DELAYA
CBIRST
RCALL DELAYA
CLR TEMP1
LOOPBAY4:
CLR TEMP2
CLR ICSD
LOOPBIN4:
LSR ICSD
SBIC ICIN,SD
SUBI ICSD,0x80
SBICLK
RCALL DELAYA
CBICLK
RCALL DELAYA
INC TEMP2
CPI TEMP2,8
BRCS LOOPBIN4
ST X+,ICSD
INC TEMP1
CPI TEMP1,ICLAN
BRCS LOOPBAY4
;===========================================================
UBSR:;发送数据
RCALL ENDIC
LDI YL,0X60
LDI YH,0X00
LDI TEMP2,0x00
UBLO:
LD TEMP1,Y+
PUSH TEMP2
RCALL BTSDI
POP TEMP2
INC TEMP2
CPI TEMP2,0x10
BRCS BBKE
LDI TEMP2,0x00
RCALL HXCC
BBKE:
CPI YL,0x60+ICLAN
BRCS UBLO
RCALL HXCC
BBED:
RCALL JEJS
RCALL SPAC5
RCALL JEJH
RCALL HXCC
;*********发送换行号************
HXCC:
LDI UBDAT,0x0D
RCALL putc
LDI UBDAT,0x0A
RCALL putc
RET
;*********金额计算十六进制,存入TTH,TTL************
JEJS:
LDI YL,0x6D
LDI YH,0x00
CLR DATAL
CLR DATAH
CLR TTH
LDI TTL,1
JSDD:
LD TEMP1,-Y
RCALL JSZS
LDI TEMP3,8
MUL TTH,TEMP3
MOV TTH,R0
MUL TTL,TEMP3
MOV TTL,R0
ADD TTH,R1
CPI YL,0x68
BRNE JSDD
RET
SPAC5:
LDI TEMP1,8
LDI UBDAT,0x20
TOSP: RCALL PUTC
DEC TEMP1
BRNE TOSP
RET
;*********金额计算十六进制转十进制经COM口发送出************
JEJH:
CBR BBIT,1
LDI TTL,0x10
LDI TTH,0x27
RCALL SUBBB
CPI TEMP3,0x30
BREQ UPP1
MOV UBDAT,TEMP3
RCALL PUTC
SBR BBIT,1
UPP1: LDI TTL,0xE8
LDI TTH,0x03
RCALL SUBBB
CPI TEMP3,0x30
BRNE UPP2
SBRS BBIT,0
RJMP UPP3
UPP2:
MOV UBDAT,TEMP3
RCALL PUTC
SBR BBIT,1
UPP3:
LDI TTL,0x64
LDI TTH,0x00
RCALL SUBBB
CPI TEMP3,0x30
BRNE UPP4
SBRS BBIT,0
RJMP UPP5
UPP4:
MOV UBDAT,TEMP3
RCALL PUTC
UPP5:
LDI TTL,0x0A
LDI TTH,0x00
RCALL SUBBB
MOV UBDAT,TEMP3
RCALL PUTC
LDI UBDAT,0x2E
RCALL PUTC
LDI UBDAT,0x30
ADD UBDAT,DATAL
RCALL PUTC
RET
SUBBB:
LDI TEMP3,0x30
SUBBE:
MOV TEMP1,TTH
SUB DATAL,TTL
BRCC SUBBH
INC TEMP1
SUBBH:
SUB DATAH,TEMP1
BRCC EDSUBB
ADD DATAL,TTL
ADD DATAH,TEMP1
RET
EDSUBB:
INC TEMP3
RJMP SUBBE
JSZS:
LDI TEMP3,8
JELOOP:
ROR TEMP1
BRCC JEJSS
ADD DATAL,TTL
BRCC JJSEE
INC DATAH
JJSEE:
ADD DATAH,TTH
JEJSS:
DEC TEMP3
BRNE JELOOP
RET
BTSDI:
MOV TEMP2,TEMP1
SWAP TEMP1
ANDI TEMP1,0x0F
RCALL INTTOSTR
RCALL putc
MOV TEMP1,TEMP2
ANDI TEMP1,0x0F
RCALL INTTOSTR
RCALL putc
LDI UBDAT,0x20
RCALL putc
RET
INTTOSTR: ;数值转字符
CPI TEMP1,10
BRSH PC+3
LDI UBDAT,'0'
RJMP PC+2
LDI UBDAT,'A'-10
ADD UBDAT,TEMP1
RET
;***************************************************************************
;***************************************************************************
DELAY:
NOP
NOP
DELAY1:
NOP
NOP
DELAY2:
NOP
NOP
DELAY3:
NOP
DELAY4:
RJMP DELAYA
;***************************************************************************
;***************************************************************************
DELAYA:
NOP
RET
;***************************************************************************
DELAY_M:
LDI R17,255
DELAY_U:
LDI R18,255
DELAY_N:
DEC R18
BRNE DELAY_N
DEC R17
BRNE DELAY_U
DEC R16
BRNE DELAY_M
RET
;***************************************************************************
putc:
sbis USR,UDRE ; test for TX register empty
rjmp putc ; loop until TX empty
out UDR,UBDAT ; send the byte
ret
;*************************************************************************** |
|