⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 keilc关于LM75A温度计的使用例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
                +1   420     LOCAL   next
                +1   421             MOV     A, xl
                +1   422             JNZ     next
                +1   423             DEC     xh
                +1   424     next:
                +1   425             DEC     xl
                +1   426             ENDM
                +1   427     
                     428     ;$include (Pointer.INC) ;通用指针处理
                +1   429     ;*************************************************************************
                +1   430     ;实用的8051单片机通用指针操作程序
                +1   431     ;适用于Keil C51编译器
                +1   432     ;*************************************************************************
                +1   433     ;关于通用指针:
                +1   434     ;       在80C51中,数据可能存储在不同的逻辑地址空间中,如idata、xdata、
                +1   435     ;       pdata、code等,如果要进行统一的操作,就必须引入通用指针的概念
                +1   436     ;通用指针用3个字节表示,第1字节为指针类型,第2、3字节表示指针内容
                +1   437     ;       类型    类型值  属性    常用性
                +1   438     ;       idata   0x00    读/写   很常用
                +1   439     ;       xdata   0x01    读/写   常用
                +1   440     ;       pdata   0xFE    读/写   不常用
                +1   441     ;       code    0xFF    只读    很常用
                +1   442     ;通用指针的运算:
                +1   443     ;       提取指针数据
                +1   444     ;       保存指针数据
                +1   445     ;       指针加常数
                +1   446     ;       指针减常数
                +1   447     ;       两个指针相减
                +1   448     ;通用指针用法:
                +1   449     ;       对数据的存取操作:将通用指针复制到(R1,DPTR)中,再调用相应的子程序
                +1   450     ;       对通用指针的算术运算:可通过双字节算术运算来实现
                +1   451     ;*************************************************************************
                +1   452     
                +1   453     
                +1   454     ;*************************************************************************
A51 MACRO ASSEMBLER  MAIN                                                                 06/23/2006 11:55:35 PAGE     8

                +1   455     ;定义指针类型
                +1   456     ;*************************************************************************
  0000          +1   457     PtrTypeIDATA    EQU     0x00
  0001          +1   458     PtrTypeXDATA    EQU     0x01
  00FE          +1   459     PtrTypePDATA    EQU     0xFE
  00FF          +1   460     PtrTypeCODE     EQU     0xFF
                +1   461     
                +1   462     
                +1   463     ;*************************************************************************
                +1   464     ;函数:BytePtrLD()
                +1   465     ;功能:从字节型通用指针指向的存储单元提取数据
                +1   466     ;参数:(R1,DPTR)为通用指针
                +1   467     ;       R1:指针类型
                +1   468     ;       DPTR:指针内容
                +1   469     ;返回:提取的数据保存在A中
                +1   470     ;*************************************************************************
001E            +1   471     BytePtrLD:
001E B90004     +1   472             CJNE    R1, #PtrTypeIDATA, BytePtrLD_code
0021 A882       +1   473             MOV     R0, DPL
0023 E6         +1   474             MOV     A, @R0
0024 22         +1   475             RET
0025            +1   476     BytePtrLD_code:
0025 B9FF03     +1   477             CJNE    R1, #PtrTypeCODE, BytePtrLD_xdata
0028 E4         +1   478             CLR     A
0029 93         +1   479             MOVC    A, @A+DPTR
002A 22         +1   480             RET
002B            +1   481     BytePtrLD_xdata:
002B B90102     +1   482             CJNE    R1, #PtrTypeXDATA, BytePtrLD_pdata
002E E0         +1   483             MOVX    A, @DPTR
002F 22         +1   484             RET
0030            +1   485     BytePtrLD_pdata:
0030 B9FE03     +1   486             CJNE    R1, #PtrTypePDATA, BytePtrLD_end
0033 A882       +1   487             MOV     R0, DPL
0035 E2         +1   488             MOVX    A, @R0
0036            +1   489     BytePtrLD_end:
0036 22         +1   490             RET
                +1   491     
                +1   492     
                +1   493     ;*************************************************************************
                +1   494     ;函数:BytePtrST()
                +1   495     ;功能:保存数据到字节型通用指针指向的存储单元
                +1   496     ;参数:(R1,DPTR)为通用指针
                +1   497     ;       R1:指针类型
                +1   498     ;       DPTR:指针内容
                +1   499     ;       A:要保存的数据
                +1   500     ;注意:不能是code型指针
                +1   501     ;*************************************************************************
0037            +1   502     BytePtrST:
0037 B90004     +1   503             CJNE    R1, #PtrTypeIDATA, BytePtrST_xdata
003A A882       +1   504             MOV     R0, DPL
003C F6         +1   505             MOV     @R0, A
003D 22         +1   506             RET
003E            +1   507     BytePtrST_xdata:
003E B90102     +1   508             CJNE    R1, #PtrTypeXDATA, BytePtrST_pdata
0041 F0         +1   509             MOVX    @DPTR, A
0042 22         +1   510             RET
0043            +1   511     BytePtrST_pdata:
0043 B9FE03     +1   512             CJNE    R1, #PtrTypePDATA, BytePtrST_end
0046 A882       +1   513             MOV     R0, DPL
0048 F2         +1   514             MOVX    @R0, A
0049            +1   515     BytePtrST_end:
0049 22         +1   516             RET
                +1   517     
                     518     ;$include (Disp.INC) ;数码管显示驱动程序
                +1   519     ;*************************************************************************
                +1   520     ;       Disp.INC
A51 MACRO ASSEMBLER  MAIN                                                                 06/23/2006 11:55:35 PAGE     9

                +1   521     ;       数码管扫描显示驱动程序
                +1   522     ;*************************************************************************
                +1   523     
                +1   524     
                +1   525     ;*************************************************************************
                +1   526     ;定义全局变量
                +1   527     ;*************************************************************************
                +1   528     ;定义显示缓冲区(由定时中断程序自动扫描)
  0030          +1   529     DispBuf         DATA    GLOBAL_IRAM     ;GLOBAL_IRAM的定义见main.asm
  0038          +1   530     GLOBAL_IRAM     SET     GLOBAL_IRAM+8
                +1   531     ;定义函数T1INTSVC()局部静态变量
  0038          +1   532     T1INTSVC_n      DATA    GLOBAL_IRAM
  0039          +1   533     GLOBAL_IRAM     SET     GLOBAL_IRAM+1
                +1   534     
                +1   535     
                +1   536     ;*************************************************************************
                +1   537     ;函数:T1INTSVC()
                +1   538     ;功能:定时器T1的中断服务函数
                +1   539     ;*************************************************************************
                +1   540     ;void T1INTSVC() interrupt 3
004A            +1   541     T1INTSVC:
                +1   542     ;{
004A C0E0       +1   543             PUSH    ACC
004C C0D0       +1   544             PUSH    PSW
004E C000       +1   545             PUSH    0x00
0050 C083       +1   546             PUSH    DPH
0052 C082       +1   547             PUSH    DPL
                +1   548     ;       code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
                +1   549     ;       static unsigned char n = 0;
                +1   550     ;       TR1 = 0;
                +1   551     ;       TH1 = 0xFC;
                +1   552     ;       TL1 = 0x66;
                +1   553     ;       TR1 = 1;
0054 C28E       +1   554             CLR     TR1
0056 758DFC     +1   555             MOV     TH1, #0xFC
0059 758B66     +1   556             MOV     TL1, #0x66
005C D28E       +1   557             SETB    TR1
                +1   558     ;       P1 = 0xFF;              //暂停显示
005E 7590FF     +1   559             MOV     P1, #0xFF
                +1   560     ;       XBYTE[0xE800] = ~DispBuf[n];    //更新扫描数据
0061 7430       +1   561             MOV     A, #DispBuf
0063 2538       +1   562             ADD     A, T1INTSVC_n
0065 F8         +1   563             MOV     R0, A
0066 E6         +1   564             MOV     A, @R0
0067 F4         +1   565             CPL     A
0068 90E800     +1   566             MOV     DPTR, #0xE800
006B F0         +1   567             MOVX    @DPTR, A
                +1   568     ;       P1 = ~com[n];   //重新显示
006C E538       +1   569             MOV     A, T1INTSVC_n
006E 900085     +1   570             MOV     DPTR, #T1INTSVC_com
0071 93         +1   571             MOVC    A, @A+DPTR
0072 F4         +1   572             CPL     A
0073 F590       +1   573             MOV     P1, A
                +1   574     ;       n++;
                +1   575     ;       n &= 0x07;
0075 0538       +1   576             INC     T1INTSVC_n
0077 533807     +1   577             ANL     T1INTSVC_n, #0x07
                +1   578     ;}
007A D082       +1   579             POP     DPL
007C D083       +1   580             POP     DPH
007E D000       +1   581             POP     0x00
0080 D0D0       +1   582             POP     PSW
0082 D0E0       +1   583             POP     ACC
0084 32         +1   584             RETI
0085            +1   585     T1INTSVC_com:
0085 01020408   +1   586             DB      0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
A51 MACRO ASSEMBLER  MAIN                                                                 06/23/2006 11:55:35 PAGE    10

0089 10204080                
                +1   587     
                +1   588     
                +1   589     ;*************************************************************************
                +1   590     ;函数:DispClear()
                +1   591     ;功能:清除数码管的所有显示
                +1   592     ;*************************************************************************
                +1   593     ;void DispClear()
008D            +1   594     DispClear:
                +1   595     ;{
                +1   596     ;       unsigned char i;
                +1   597     ;       for ( i=0; i<8; i++ )
008D 7830       +1   598             MOV     R0, #DispBuf
008F 7908       +1   599             MOV     R1, #8
0091 E4         +1   600             CLR     A
0092            +1   601     DispClear_for:
                +1   602     ;       {
                +1   603     ;               DispBuf[i] = 0x00;
0092 F6         +1   604                     MOV     @R0, A
0093 08         +1   605                     INC     R0
                +1   606     ;       }
0094 D9FC       +1   607             DJNZ    R1, DispClear_for
                +1   608     ;}
0096 22         +1   609             RET
                +1   610     
                +1   611     
                +1   612     ;*************************************************************************
                +1   613     ;函数:DispChar()
                +1   614     ;功能:在数码管上显示字符
                +1   615     ;参数:
                +1   616     ;       x:数码管的坐标位置(0~7)
                +1   617     ;       c:要显示的字符(仅限十进制数字和减号)
                +1   618     ;*************************************************************************
                +1   619     ;void DispChar(unsigned char x, unsigned char c)
                +1   620     ;x = R7
                +1   621     ;c = R6
0097            +1   622     DispChar:
                +1   623     ;{
                +1   624     ;       //0123456789的数码管字型数据
                +1   625     ;       code unsigned char Tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
                +1   626     ;       x &= 0x07;
                +1   627     ;       x = 7 - x;
0097 7407       +1   628             MOV     A, #7
0099 5207       +1   629             ANL     0x07, A
009B C3         +1   630             CLR     C
009C 9F         +1   631             SUBB    A, R7
009D FF         +1   632             MOV     R7, A

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -