📄 other.lst
字号:
MPASM 5.04 OTHER.ASM 6-28-2007 13:54:35 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 #include <P18F6520.INC>
00001 LIST
00002
00003 ;==========================================================================
00004 ; $Id: P18F6520.INC,v 1.12.4.1 2005/02/15 17:35:35 curtiss Exp $
00005 ; MPASM PIC18F6520 processor include
00006 ;
00007 ; (c) Copyright 1999-2005 Microchip Technology, All rights reserved
00008 ;==========================================================================
00009
01439 LIST
00002
00003 #define OSC4M
00004 #define IrTXD PORTA,0
00005 #define IrRXD PORTB,0
00006
00007 GPRSDATA UDATA_ACS
000000 00008 SerialBuf res 1
000001 00009 delay_cnt1 res 1 ;只在ASM文件中定义了这两个变量。
000002 00010 delay_cnt2 res 1
00011
000003 00012 cUseInINT res 1
000004 00013 rBitCounter res 1
00014
0000 00015 EXTERN ByteReceived
0000 00016 EXTERN RevTemp
0000 00017 EXTERN IrTX9D
0000 00018 EXTERN Ir_ByteToSend
00019
00020 CODE
00021 ; ----------------------------------------------------
000000 00022 RB0INT ;软件模拟红外接收
0000 00023 GLOBAL RB0INT ; export so linker can see it
000000 5081 00024 movf PORTB,W
000002 EC?? F??? 00025 call HalfBit ;延时半个bit,到达起始位的中心点
000006 B081 00026 btfsc IrRXD ;1tc
000008 EF?? F??? 00027 goto SerialExit ;是干扰,退出
00028 ;仍为低:是起始位
00029 ;start bit
00030 ;延时1个bit,到达 bit0的中心点
00000C EC?? F??? 00031 call DelayForNextBitCenter
00032 ;bit0
000010 6A?? 00033 clrf SerialBuf
000012 0E08 00034 movlw .8
000014 6E?? 00035 movwf rBitCounter
000016 00036 SerialLoop:
000016 B081 00037 btfsc IrRXD
000018 EF?? F??? 00038 goto SetBit1
00001C 90D8 00039 bcf STATUS,C
00001E EF?? F??? 00040 goto SetBit2
000022 00041 SetBit1:
000022 80D8 00042 bsf STATUS,C
000024 00043 SetBit2:
MPASM 5.04 OTHER.ASM 6-28-2007 13:54:35 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000024 32?? 00044 rrcf SerialBuf,F
000026 EC?? F??? 00045 call DelayForNextBitCenter
00002A 2E?? 00046 decfsz rBitCounter,F
00002C EF?? F??? 00047 goto SerialLoop
00048 ;再延时1个bit,跳过偶校验位,到达停止位的中心点
000030 EC?? F??? 00049 call DelayForNextBitCenter
00050 ;;; btfss IrRXD
00051 ;SerialError:
00052 ;;; goto SerialExit
00053 ;received stop bit
00054 ;ReceiveOK:
00055 ;收到一字节
00056 ; bcf INTCON, INT0IF ;不清除INT0IF,这样在中断程序中就知道来的是红外还是485
000034 50?? 00057 movf SerialBuf,W
000036 6E?? 00058 movwf RevTemp
00059
000038 0012 00060 return ; 如何转到串口1的正常接收流程里去??
00003A 00061 SerialExit:
00062 ;停止位不为1,有错误,清除INT0IF退出
00003A 92F2 00063 bcf INTCON, INT0IF ; Clear the RB interrupt flag.
00064
00003C 0012 00065 return
00066
00067 ; --------------------------------------------------------------------------
00068 ; Half Bit Time=833us/2=417us,417us/1.11746us=373tc
00069 ; HalfBit routine 的延时数=373-17=356c ;进入中断后经过17tc才调用Halfbit
00070 ; call =2 tc
00071 ; movlw =1 tc
00072 ; movwf =1 tc
00073 ; Delay Loop =351 tc(117x3)
00074 ; return =2 tc
00075
00076 ; Total =356tc
00077 ; ------------------------------------------------------------------
00078 ; 如果是4M晶振,4分频后,1tc=1us
00079 ; Half Bit Time=833us/2=417us,417us/1us=417tc
00080 ; HalfBit routine 的延时数=417-17=400c ;进入中断后经过17tc才调用Halfbit
00081 ; call =2 tc
00082 ; movlw =1 tc
00083 ; movwf =1 tc
00084 ; Delay Loop =393 tc(131x3)
00085 ; nop =1 tc
00086 ; return =2 tc
00087
00088 ; Total =400tc
00003E 00089 HalfBit:
00003E 0E83 00090 movlw D'131'
000040 6E?? 00091 movwf cUseInINT
000042 00092 HalfBit1:
000042 2E?? 00093 decfsz cUseInINT,F
000044 EF?? F??? 00094 goto HalfBit1
000048 0012 00095 return
00096 ; --------------------------------------------------------------------------
MPASM 5.04 OTHER.ASM 6-28-2007 13:54:35 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00097 ; 3.579545M晶振,4分频后,1tc=1.11746us
00098 ; 1 BIT TIME=833us/1.11746us=745 tc
00099 ; FullBit routine 的延时数=745 tc
00100 ; call =2 tc
00101 ; movlw =1 tc
00102 ; movwf =1 tc
00103 ; Delay Loop =246*3=738tc
00104 ; nop =1 tc
00105 ; return =2 tc
00106 ; Total =745tc
00107 ; ---------------------------------------------------------
00108 ;
00109 ; 如果是4M晶振,4分频后,1tc=1us
00110 ; 1BIT需要等待的机器周期数 = 833us/1us=833 tc
00111 ; FullBit routine 的延时数=833 tc
00112 ; call =2 tc
00113 ; movlw =1 tc
00114 ; movwf =1 tc
00115 ; Delay Loop =275*3=825tc
00116 ; nop*2 =2 tc
00117 ; return =2 tc
00118 ; Total =833tc
00119 ; 275单字节装不下,用两次
00120 ; ---------------------------------------------------------
00004A 00121 DelayForNextBitCenter: ;前面的语句消耗6tc
00004A 0EC8 00122 movlw D'200'
00004C 6E?? 00123 movwf cUseInINT
00004E 00124 DFN1:
00004E 2E?? 00125 decfsz cUseInINT,F
000050 EF?? F??? 00126 goto DFN1
00127 ;耗掉 2+1+1+600=604,剩下833-604=229个tc
000054 0E4B 00128 movlw D'75' ;1tc
000056 6E?? 00129 movwf cUseInINT ;1tc
000058 00130 DFN2: ;227,刨掉return还有225,正好cUseInINT=75
000058 2E?? 00131 decfsz cUseInINT,F
00005A EF?? F??? 00132 goto DFN2
00005E 0012 00133 return
00134
00135 ; =================================
00136
00137 ; 发送一字节子程序
00138 ; 入口:A 待发送字节
00139 ; 使用:SerialBuf,rBitCounter,rCounter
00140 ; 要求:发送前,应做以下准备
00141 ; 1.数据域的数据已加33H
00142 ; 2.关闭接收中断
00143 ; 3.关闭总中断
00144 ; 发送后,打开接收中断,打开总中断
00145 ;*****************************************************************************
00146 ; SEND SERIAL DATA
000060 00147 SendByte
0000 00148 GLOBAL SendByte
000060 0E08 00149 movlw .8
MPASM 5.04 OTHER.ASM 6-28-2007 13:54:35 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000062 6E?? 00150 movwf rBitCounter
00151 ;发送起始位
000064 9080 00152 bcf IrTXD
000066 EC?? F??? 00153 call DelayForNextBitCenter
00154 ;发送8bit数据
00006A 00155 SendSDLoop:
00006A B0?? 00156 btfsc Ir_ByteToSend,0
00006C EF?? F??? 00157 goto SetTX1
000070 00158 SetTX0:
000070 9080 00159 bcf IrTXD
000072 EF?? F??? 00160 goto Loop_Judge
000076 00161 SetTX1:
000076 8080 00162 bsf IrTXD
000078 00163 Loop_Judge:
000078 EC?? F??? 00164 call DelayForNextBitCenter
00007C 32?? 00165 rrcf Ir_ByteToSend,F
00007E 2E?? 00166 decfsz rBitCounter,F
000080 EF?? F??? 00167 goto SendSDLoop
00168 ;发送偶校验位
000084 50?? 00169 movf IrTX9D,W ; 读出接收到的数据
000086 A4D8 00170 btfss STATUS,Z ;Z=1?(bit9=0)
000088 EF?? F??? 00171 goto SB1
00008C 9080 00172 bcf IrTXD ;yes,bit9=0
00008E EF?? F??? 00173 goto SB2
000092 00174 SB1:
000092 8080 00175 bsf IrTXD
000094 00176 SB2:
000094 EC?? F??? 00177 call DelayForNextBitCenter
00178 ;发送停止位
000098 8080 00179 bsf IrTXD
00009A EC?? F??? 00180 call DelayForNextBitCenter
00009E 0000 00181 nop
0000A0 0012 00182 return
00183 ; =================================
0000A2 00184 delay1ms
0000 00185 GLOBAL delay1ms ; export so linker can see it
0000A2 0E01 00186 movlw 0x01
0000A4 EF?? F??? 00187 goto DL0
0000A8 00188 delay2ms
0000 00189 GLOBAL delay2ms ; export so linker can see it
0000A8 0E02 00190 movlw 0x02
0000AA EF?? F??? 00191 goto DL0
0000AE 00192 delay4ms
0000 00193 GLOBAL delay4ms ; export so linker can see it
0000AE 06?? 00194 DECF delay_cnt1
0000B0 06?? 00195 DECF delay_cnt1
00196
0000B2 0E05 00197 movlw 0x05
0000B4 EF?? F??? 00198 goto DL0
00199
0000B8 00200 delay10ms
0000 00201 GLOBAL delay10ms ; export so linker can see it
00202 ; 4MHz crystal,延时10.027ms,周期数 T=D10027
MPASM 5.04 OTHER.ASM 6-28-2007 13:54:35 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0000B8 0E0D 00203 movlw D'13'
0000BA EF?? F??? 00204 goto DL0
0000BE 00205 delay20ms
0000 00206 GLOBAL delay20ms ; export so linker can see it
0000BE 0E1A 00207 movlw D'26'
0000C0 EF?? F??? 00208 goto DL0
00209
0000C4 00210 delay50ms
0000 00211 GLOBAL delay50ms ; export so linker can see it
0000C4 0E41 00212 movlw D'65'
0000C6 EF?? F??? 00213 goto DL0
00214
0000CA 00215 delay200ms
0000 00216 GLOBAL delay200ms ; export so linker can see it
0000CA 0EFF 00217 movlw D'255'
0000CC 00218 DL0
0000CC 6E?? 00219 movwf delay_cnt2
0000CE 68?? 00220 SETF delay_cnt1
0000D0 00221 DL1
0000D0 06?? 00222 DECF delay_cnt1
0000D2 E1?? 00223 BNZ DL1
0000D4 0004 00224 clrwdt
0000D6 06?? 00225 DECF delay_cnt2
0000D8 E1?? 00226 BNZ DL1
0000DA 0000 00227 nop
0000DC 00228 done
0000DC 0012 00229 return
00230
00231 END
MPASM 5.04 OTHER.ASM 6-28-2007 13:54:35 PAGE 6
SYMBOL TABLE
LABEL VALUE
A 00000000
ACCESS 00000000
ACKDT 00000005
ACKEN 00000004
ACKSTAT 00000006
ADCON0 00000FC2
ADCON1 00000FC1
ADCON2 00000FC0
ADCS0 00000000
ADCS1 00000001
ADCS2 00000002
ADDEN 00000003
ADEN 00000003
ADFM 00000007
ADIE 00000006
ADIF 00000006
ADIP 00000006
ADON 00000000
ADRES 00000FC3
ADRESH 00000FC4
ADRESL 00000FC3
AN0 00000000
AN1 00000001
AN10 00000005
AN11 00000006
AN2 00000002
AN3 00000003
AN4 00000005
AN5 00000000
AN6 00000001
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -