📄 theat.lst
字号:
MPASM 5.06.4 THEAT.ASM 7-27-2007 17:03:12 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ;*************************************************
00002 ;* heat.asm **
00003 ;*************************************************
00004 ;* 本程序为热敏电阻输入处理模块程序
00005 ;* 将温度值在LCD特定位置显示
00006 ;* 占用I/O RA1
00007 ;* 使用RAM 3个字节
00008 ;* 程序包括:
00009 ;* - TempM 热敏电阻输入处理子程序
00010 ;* - CalTable 温度值校准处理子程序
00011 ;* - Bin2BCDT -二进制数转两位ASCII码子程序
00012 ;* 入口参数 无
00013 ;* 出口参数 TempH,TempL (温度值)
00014 ;*************************************************
00015 #INCLUDE P16F877A.INC ;定义所用单片机的头文件
00001 LIST
00002 ; P16F877A.INC Standard Header File, Version 1.00 Microchip Technology, Inc.
00400 LIST
00016
00000020 00017 TEMP EQU 0X20
00000021 00018 TEMPH EQU 0X21
00000022 00019 TEMPL EQU 0X22
00020
00000024 00021 LED_DATA EQU 0X24 ;要显示的数值
00000025 00022 CLKCOUNT EQU 0X25 ;脉冲记数器
00000025 00023 COUNT EQU 0X25 ;
00000026 00024 COUNT1 EQU 0X26 ;
00000027 00025 COUNT2 EQU 0X27 ;
00026 #DEFINE SRCLK PORTB,5; SPI CLK
00027 #DEFINE RCLK PORTB,4; 完成脉冲线
00028 #DEFINE SER PORTB,3; SPI SDO
00029
Warning[205]: Found directive in column 1. (ORG)
0000 00030 ORG 0X0
Warning[203]: Found opcode in column 1. (CALL)
0000 20A4 00031 CALL PRELED;
Warning[203]: Found opcode in column 1. (CALL)
0001 2080 00032 CALL TEMPM;
Warning[203]: Found opcode in column 1. (MOVF)
0002 0822 00033 MOVF TEMPL,W;
Warning[203]: Found opcode in column 1. (MOVWF)
0003 00A4 00034 MOVWF LED_DATA;
Warning[203]: Found opcode in column 1. (CALL)
0004 20AB 00035 CALL MONILED
Warning[203]: Found opcode in column 1. (MOVF)
0005 0821 00036 MOVF TEMPH,W;
Warning[203]: Found opcode in column 1. (MOVWF)
0006 00A4 00037 MOVWF LED_DATA;
Warning[203]: Found opcode in column 1. (CALL)
0007 20AB 00038 CALL MONILED;
Warning[203]: Found opcode in column 1. (CALL)
0008 20D1 00039 CALL DELAY;
Warning[203]: Found opcode in column 1. (GOTO)
MPASM 5.06.4 THEAT.ASM 7-27-2007 17:03:12 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0009 2800 00040 GOTO 0X0;
00041
00042
000A 00043 CALTABLE ;温度校正函数
000A 1283 00044 BCF STATUS,RP0
000B 303A 00045 MOVLW 0X3A ;进行校准处理(调整该处值以得到正确的温度值)
000C 0220 00046 SUBWF TEMP,W ;
000D 0782 00047 ADDWF PCL,F ;将补偿结果与 PCL相加
00048 ;*注意:要通过反汇编查看CalTable函数是否跨页(这里的跨页指PCL溢出),若跨页则要调整该函数位置
000E 3400 3400 3400 00049 DT 0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5
3400 3401 3401
3401 3401 3402
3402 3402 3402
3403 3403 3403
3403 3404 3404
3404 3404 3405
3405 3405
0025 3406 3406 3406 00050 DT 6,6,6,7,7,7,8,8,8,9,9,0XA,0XA,0XB,0XB,0XC,0XC
3407 3407 3407
3408 3408 3408
3409 3409 340A
340A 340B 340B
340C 340C
0036 340D 340D 340E 00051 DT 0XD,0XD,0XE,0XE,0XF,0XF,0XF,0X10,0X10,0X10
340E 340F 340F
340F 3410 3410
3410
0040 3411 3411 3412 00052 DT 0X11,0X11,0X12,0X12,0X12,0X13,0X13,0X14,0X14,0X14
3412 3412 3413
3413 3414 3414
3414
004A 3415 3415 3415 00053 DT 0X15,0X15,0X15,0X16,0X16,0X16,0X17,0X17,0X18,0X18
3416 3416 3416
3417 3417 3418
3418
0054 3419 3419 341A 00054 DT 0X19,0X19,0X1A,0X1A,0X1B,0X1B,0X1C,0X1C,0X1C
341A 341B 341B
341C 341C 341C
005D 341D 341D 341D 00055 DT 0X1D,0X1D,0X1D,0X1E,0X1E,0X1F,0X1F,0X20,0X20
341E 341E 341F
341F 3420 3420
0066 3421 3421 3422 00056 DT 0X21,0X21,0X22,0X22,0X23,0X23,0X24,0X24,0X25,0X25
3422 3423 3423
3424 3424 3425
3425
0070 3426 3426 3427 00057 DT 0X26,0X26,0X27,0X28,0X29,0X29,0X2A,0X2A,0X2B,0X2B
3428 3429 3429
342A 342A 342B
342B
007A 342C 342D 342E 00058 DT 0X2C,0X2D,0X2E,0X2F,0X30,0X32
342F 3430 3432
00059 ;********************************************************
0080 00060 TEMPM ;热敏电阻输入处理
MPASM 5.06.4 THEAT.ASM 7-27-2007 17:03:12 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00061
0080 1683 00062 BSF STATUS,RP0 ;初始化RA2
0081 3002 00063 MOVLW 0X02
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0082 009F 00064 MOVWF ADCON1 ;ADRESH all 8-bit
0083 1283 00065 BCF STATUS,RP0
0084 3049 00066 MOVLW B'01001001' ;select AD1,FOSC/8
0085 009F 00067 MOVWF ADCON0 ;
0086 3010 00068 MOVLW 0X10 ;延时
0087 00A0 00069 MOVWF TEMP
0088 0BA0 00070 DECFSZ TEMP,F
0089 2888 00071 GOTO $-1
008A 151F 00072 BSF ADCON0,GO ;启动转换
008B 191F 00073 BTFSC ADCON0,GO
008C 288B 00074 GOTO $-1
008D 081E 00075 MOVF ADRESH,W ;读取转换结果的高8位
008E 00A0 00076 MOVWF TEMP
008F 3000 00077 MOVLW HIGH CALTABLE ;进行校正
0090 008A 00078 MOVWF PCLATH
0091 200A 00079 CALL CALTABLE
0092 00A0 00080 MOVWF TEMP
0093 2095 00081 CALL BIN2BCDT ;进行BCD码调整
0094 0008 00082 RETURN
00083 ;************************************************
00084 ;* Bin2BCDT - 将 Temp 寄存器内的二进制数转 *
00085 ;* 换为相应的 ASCII 码并存为 TempH:TempL 的形式 *
00086 ;************************************************
0095 00087 BIN2BCDT
0095 1283 00088 BCF STATUS,RP0
0096 01A1 00089 CLRF TEMPH ;Initialize variables
0097 0820 00090 MOVF TEMP,W
0098 00A2 00091 MOVWF TEMPL
0099 00092 TTENTH ;Subtract 10 from low variable
0099 300A 00093 MOVLW .10 ;until result is < 0. On each
009A 0222 00094 SUBWF TEMPL,W ;subtraction, increment the
009B 1C03 00095 BTFSS STATUS,C ;temperature high byte.
009C 28A0 00096 GOTO OVER0
009D 00A2 00097 MOVWF TEMPL
009E 0AA1 00098 INCF TEMPH,F
009F 2899 00099 GOTO TTENTH
00A0 00100 OVER0
00A0 3030 00101 MOVLW 0X30 ;Make decimal ASCII by adding
00A1 04A1 00102 IORWF TEMPH,F ;'0' to high and low byte
00A2 04A2 00103 IORWF TEMPL,F
00A3 0008 00104 RETURN
00105 ;**************************************************************
00106
00A4 00107 PRELED
00A4 0186 00108 CLRF PORTB;
00A5 3008 00109 MOVLW 0X8
00A6 00A5 00110 MOVWF CLKCOUNT;
00A7 1683 00111 BSF STATUS,RP0;
00112 ;BCF ANSEL,7; MAKE RC3 DIGITAL IO;use for 16f676
MPASM 5.06.4 THEAT.ASM 7-27-2007 17:03:12 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
00A8 0186 00113 CLRF TRISB; MAKE RC3,RC4,RC5 OUTPUT
00A9 1283 00114 BCF STATUS,RP0;
00AA 0008 00115 RETURN
00AB 00116 MONILED; 入口参数LED_DATA,为0-9ASCALL码
00117 ;芯片全部在时钟上升沿完成动作,故需在低电平期间完成数据的变化。
00AB 300F 00118 MOVLW 0X0F;
00AC 05A4 00119 ANDWF LED_DATA,F;得到0-9;
00AD 0824 00120 MOVF LED_DATA,W;
00AE 20C6 00121 CALL LED_TABLE;
00AF 00A4 00122 MOVWF LED_DATA; 得到0-9对应的LED段码;该码表与SPI主模式下码表一致,故模拟时,高位
; 先送出,芯片最高工作频率30M故不需要特别的延时
00B0 1206 00123 BCF RCLK;
00B1 00124 GOGOGO
00B1 1286 00125 BCF SRCLK;
00B2 0DA4 00126 RLF LED_DATA,F;
00B3 1803 00127 BTFSC STATUS,C;
00B4 28B6 00128 GOTO SETSER;
00B5 28B8 00129 GOTO CLRSER;
00B6 00130 SETSER
00B6 1586 00131 BSF SER;
00B7 28B9 00132 GOTO SETSRCLK;
00B8 00133 CLRSER
00B8 1186 00134 BCF SER;
00B9 00135 SETSRCLK
00B9 0000 00136 NOP
00BA 0000 00137 NOP
00BB 1686 00138 BSF SRCLK
00BC 0000 00139 NOP
00BD 0BA5 00140 DECFSZ CLKCOUNT,F;
00BE 28B1 00141 GOTO GOGOGO;
00BF 1206 00142 BCF RCLK;干扰太厉害,必须在这清0,然后制造上升沿
00C0 0000 00143 NOP
00C1 0000 00144 NOP
00C2 1606 00145 BSF RCLK;
00C3 3008 00146 MOVLW 0X8;
00C4 00A5 00147 MOVWF CLKCOUNT;
00C5 0008 00148 RETURN
00149
00150
00C6 00151 LED_TABLE ;七段码调整 如果表出现PCL溢出,要调整表的位置
00C6 0782 00152 ADDWF PCL,F
00C7 343F 3406 345B 00153 DT 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F
344F 3466 346D
347D 3407 347F
346F
00154
00D1 00155 DELAY ;1S延时(4M下)
00156 ; call指令占用2个指令周期
00D1 01A5 00157 CLRF COUNT ; 清 Count占用1个指令周期
00D2 01A6 00158 CLRF COUNT1 ; 清 Count1占用1个指令周期
00D3 3006 00159 MOVLW 0X06 ;占用1个指令周期
00D4 00A7 00160 MOVWF COUNT2 ;占用1个指令周期
MPASM 5.06.4 THEAT.ASM 7-27-2007 17:03:12 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00D5 00161 LDLOOP
00D5 0BA5 00162 DECFSZ COUNT,F ; 这两行指令将延时
00D6 28D5 00163 GOTO LDLOOP ; (256 * 3) -1 个指令周期
00D7 0BA6 00164 DECFSZ COUNT1,F
00D8 28D5 00165 GOTO LDLOOP
00D9 0BA7 00166 DECFSZ COUNT2,F
00DA 28D5 00167 GOTO LDLOOP
00DB 0008 00168 RETURN
00169 END
MPASM 5.06.4 THEAT.ASM 7-27-2007 17:03:12 PAGE 6
SYMBOL TABLE
LABEL VALUE
ACKDT 00000005
ACKEN 00000004
ACKSTAT 00000006
ADCON0 0000001F
ADCON1 0000009F
ADCS0 00000006
ADCS1 00000007
ADCS2 00000006
ADDEN 00000003
ADFM 00000007
ADIE 00000006
ADIF 00000006
ADON 00000000
ADRESH 0000001E
ADRESL 0000009E
BCLIE 00000003
BCLIF 00000003
BF 00000000
BIN2BCDT 00000095
BRGH 00000002
C 00000000
C1INV 00000004
C1OUT 00000006
C2INV 00000005
C2OUT 00000007
CALTABLE 0000000A
CCP1CON 00000017
CCP1IE 00000002
CCP1IF 00000002
CCP1M0 00000000
CCP1M1 00000001
CCP1M2 00000002
CCP1M3 00000003
CCP1X 00000005
CCP1Y 00000004
CCP2CON 0000001D
CCP2IE 00000000
CCP2IF 00000000
CCP2M0 00000000
CCP2M1 00000001
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -