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

📄 ic.lst

📁 IC卡收费器
💻 LST
📖 第 1 页 / 共 4 页
字号:
0374 F574            413             MOV 74H,A 
0376                 414     D2:
0376 120730          415             LCALL KSTART         ;等待松手
0379 70FB            416             JNZ D2
037B E574            417             MOV A,74H
037D B40A02          418             CJNE A,#0AH,GS       ;判断不是确定键则继续输入,否则返回
0380 8012            419             JMP DEND
0382                 420     GS:
0382 B40B0A          421             CJNE A,#0BH,GS1      ;判断是不是取消键
0385 7960            422             MOV R1,#60H
0387                 423     D5:
0387 7700            424             MOV @R1,#00H
0389 09              425             INC R1
038A B966FA          426             CJNE R1,#66H,D5
038D 8005            427             JMP DEND
038F                 428     GS1:
038F 1203A3          429             LCALL SHOWNUM        ;不是确认键则调用显示程序
0392 80DD            430             JMP D3
0394                 431     DEND:
0394 22              432     RET
                     433     ;*******************************单个数字的输入*********************
0395                 434     ENTER:          ;存取钱的时候对键盘输入值的处理
0395                 435     ENEXT:
0395 1206E7          436             LCALL KEYSCAN    ;扫描键盘输入
0398 B40A02          437             CJNE A,#0AH,ENT  ;判断不是确定键则继续输入,否则返回
039B 8005            438             JMP ENTEND
039D                 439     ENT:
039D F6              440             MOV @R0,A        ;将输入数据放入以60h开始的单元
039E 08              441             INC R0
039F 0F              442             INC R7
03A0 8000            443             JMP E1     
03A2                 444     ENTEND:
03A2 22              445     E1:     RET
                     446     ;*************************对已输入数据的循环显示*******************
03A3                 447     SHOWNUM:
03A3                 448     S0:
03A3 8F55            449             MOV 55h,R7         ;单轮循环次数放在b中
03A5 120730          450             LCALL KSTART        
03A8 7035            451             JNZ SEND
03AA 7571FE          452             MOV 71H,#0FEH
03AD                 453     S1:
A51 MACRO ASSEMBLER  IC                                                                   07/12/2008 15:19:28 PAGE     8

03AD 7960            454             MOV R1,#60H        ;循环显示的起始位置
03AF                 455     S3:
03AF DF04            456             DJNZ R7,S2         ;一轮是否显示完
03B1 AF55            457             MOV R7,55h         ;显示完毕则重给R2赋原值
03B3 80EE            458             JMP S0
03B5                 459     S2:
03B5 E7              460             MOV A,@R1          ;显示的数字放入A中
03B6 1203E0          461             LCALL K2N
03B9 C2A6            462             CLR  DULA
03BB 758000          463             MOV  P0,#00H         
03BE D2A6            464             SETB DULA
03C0 C2A6            465             CLR  DULA
03C2 C2A7            466             CLR  WELA
03C4 857180          467             MOV  P0,71H   
03C7 D2A7            468             SETB WELA
03C9 C2A7            469             CLR  WELA                            
03CB C2A6            470             CLR  DULA
03CD 857280          471             MOV  P0,72H         ;全灭,选中71H位,显示72H内容
03D0 D2A6            472             SETB DULA        
03D2 C2A6            473             CLR  DULA
03D4 120738          474             LCALL DELAY2
03D7 E571            475             MOV A,71H
03D9 23              476             RL A
03DA F571            477             MOV 71H,A
03DC 09              478             INC R1
03DD 80D0            479             JMP S3
03DF                 480     SEND:
03DF 22              481     RET
                     482     ;****************************键值转化为表示的码*********************
03E0                 483     K2N:
03E0 B40005          484             CJNE A,#0H,NU1
03E3 75723F          485             MOV 72H,#3FH
03E6 8043            486             JMP NUEND
03E8                 487     NU1:
03E8 B40105          488             CJNE A,#1H,NU2
03EB 757206          489             MOV 72H,#06H
03EE 803B            490             JMP NUEND
03F0                 491     NU2:
03F0 B40205          492             CJNE A,#2H,NU3
03F3 75725B          493             MOV 72H,#5BH
03F6 8033            494             JMP NUEND
03F8                 495     NU3:
03F8 B40305          496             CJNE A,#3H,NU4
03FB 75724F          497             MOV 72H,#4FH
03FE 802B            498             JMP NUEND
0400                 499     NU4:
0400 B40405          500             CJNE A,#4H,NU5
0403 757266          501             MOV 72H,#66H
0406 8023            502             JMP NUEND
0408                 503     NU5:
0408 B40505          504             CJNE A,#5H,NU6
040B 75726D          505             MOV 72H,#6DH
040E 801B            506             JMP NUEND
0410                 507     NU6:
0410 B40605          508             CJNE A,#6H,NU7
0413 75727D          509             MOV 72H,#7DH
0416 8013            510             JMP NUEND
0418                 511     NU7:
0418 B40705          512             CJNE A,#7H,NU8
041B 757207          513             MOV 72H,#07H
041E 800B            514             JMP NUEND
0420                 515     NU8:
0420 B40805          516             CJNE A,#8H,NU9
0423 75727F          517             MOV 72H,#7FH
0426 8003            518             JMP NUEND
0428                 519     NU9:
A51 MACRO ASSEMBLER  IC                                                                   07/12/2008 15:19:28 PAGE     9

0428 75726F          520             MOV 72H,#6FH
042B                 521     NUEND:
042B 22              522     RET
                     523     ;*****************************向存储芯片写入*******************
042C D2A0            524     WR_1B:  SETB      SDA            ;初始状态
042E D2A1            525             SETB      SCL            ;置SDA&SCL=1   
0430 9179            526             ACALL     START          ;启动I2C总线
0432 7FA0            527             MOV       R7,#0A0H       ;写命令        
0434 9187            528             ACALL     WR8BIT         ;按位写入1个字节       
0436 91A4            529             ACALL     CACK           ;应答检查
0438 8520E0          530             MOV       ACC,POINTER    ;取芯片地址
043B AFE0            531             MOV       R7,ACC         ;送芯片地址
043D 9187            532             ACALL     WR8BIT         ;写芯片地址
043F 91A4            533             ACALL     CACK           ;应答检查
0441 8521E0          534             MOV       ACC,NUMB       ;取待写数据
0444 AFE0            535             MOV       R7,ACC         ;送数据 
0446 9187            536             ACALL     WR8BIT         ;写数据
0448 91A4            537             ACALL     CACK           ;应答检查
044A 91DD            538             ACALL     STOP           ;停止
044C 91F8            539             ACALL     DEL10MS        ;等待内部写周期完成
044E 22              540             RET
                     541     ;***************************读存储芯片指定地址的单元******************
044F 120479          542     RD_1B:        LCALL      START  ;启动总线
0452 7FA0            543                   MOV        R7,#0A0H       ;写命令
0454 120487          544                   LCALL      WR8BIT ;写写命令
0457 1204A4          545                   LCALL      CACK   ;应答检查
045A E520            546     MOV        A,POINTER    ;取地址
045C FF              547     MOV        R7,A ;送地址
045D 120487          548     LCALL      WR8BIT       ;写地址
0460 1204A4          549     LCALL      CACK ;应答检查
0463 D2A0            550     SETB       SDA  ;
0465 D2A1            551     SETB       SCL  ;保证启动条件
0467 120479          552     LCALL      START        ;再次启动总线,以便进行读操作
046A 7FA1            553     MOV        R7,#0A1H     ;送芯片地址+写命令
046C 120487          554     LCALL      WR8BIT       ;写芯片地址+写命令
046F 1204A4          555     LCALL      CACK ;应答检查
0472 1204BB          556     LCALL      RD8BIT       ;读8位数
0475 1204DD          557     LCALL      STOP ;关闭总线
0478 22              558     RET
0479 1204EB          559     START:     LCALL       DEL5US   ;对2402操作开始
047C C2A0            560                CLR         SDA              ;在SCL=1时,SDA由1变为0表示开始
047E 1204EB          561                LCALL       DEL5US   
0481 C2A1            562                CLR         SCL
0483 1204EB          563                LCALL       DEL5US
0486 22              564           RET
                     565     ;***************************写8比特*****************************
0487 EF              566     WR8BIT: MOV       A,R7         ;将R7中的数发送出去
0488 7E08            567             MOV       R6,#08H      ;数据位数
048A 33              568     WR1BIT: RLC       A            ;将A中的数据移到数据线上
048B 92A0            569             MOV       SDA,C        ;送出数据
048D 1204EB          570             LCALL     DEL5US       ;延时5US
0490 D2A1            571             SETB      SCL          ;发送串行时钟进行写操作
0492 1204EB          572             LCALL     DEL5US        
0495 C2A1            573             CLR       SCL
0497 DEF1            574             DJNZ      R6,WR1BIT     ;串行发送8BIT
0499 D2A0            575             SETB      SDA           ;准备接收ACK    
049B 1204EB          576             LCALL     DEL5US        
049E D2A1            577             SETB      SCL           ;接收ACK的时钟
04A0 1204EB          578             LCALL     DEL5US
04A3 22              579             RET
04A4 7905            580     CACK:   MOV       R1,#05        ;检测应答             
04A6 A2A0            581     CACK1:  MOV       C,SDA
04A8 D903            582             DJNZ      R1,Y1
04AA 0204B1          583             LJMP      Y2     
04AD 40F7            584     Y1:     JC        CACK1         ;有应答的时候应为低电平
04AF 81B3            585             AJMP      Y3    
A51 MACRO ASSEMBLER  IC                                                                   07/12/2008 15:19:28 PAGE    10

04B1 7906            586     Y2:     MOV       R1,#06H
04B3 C2A1            587     Y3:     CLR       SCL           ;为下一步其他操作做准备
04B5 C2A0            588             CLR       SDA           ;
04B7 1204F0          589             LCALL     DEL1MS        ;等待内部写完
04BA 22              590     RET
                     591     ;***************************读8比特*****************************
04BB C0E0            592     RD8BIT:       PUSH   ACC        ;保存 ACC
04BD 7E08            593                   MOV         R6,#08H       
04BF D2A0            594     RD1B:         SETB        SDA   ;置数据线=1
04C1 1204EB          595                   LCALL       DEL5US        
04C4 D2A1            596                   SETB        SCL   ;输出一个串行时钟
04C6 1204EB          597                   LCALL       DEL5US        
04C9 A2A0            598                   MOV         C,SDA ;读数据线上的数据到C
04CB 33              599                   RLC         A             ;移到ACC
04CC 1204EB          600                   LCALL       DEL5US        
04CF C2A1            601                   CLR         SCL
04D1 DEEC            602                   DJNZ        R6,RD1B       ;读8BIT数据
04D3 1204EB          603                   LCALL       DEL5US
04D6 C2A0            604                   CLR         SDA
04D8 AFE0            605                   MOV         R7,ACC        ;将接收到的数据保存到R7
04DA D0E0            606                   POP         ACC           ;还原ACC
04DC 22              607                   RET
04DD 1204EB          608     STOP:         LCALL      DEL5US ;对2402操作结束
04E0 D2A1            609                   SETB       SCL            ;在 SCL =1时,SDA由0变为1表示结束
04E2 1204EB          610                   LCALL      DEL5US 
04E5 D2A0            611                   SETB       SDA
04E7 1204EB          612                   LCALL      DEL5US
04EA 22              613                   RET
04EB 00              614     DEL5US:         NOP
04EC 00              615                     NOP
04ED 00              616                     NOP
04EE 00              617                     NOP
04EF 22              618                     RET
04F0 7CC8            619     DEL1MS:   MOV  R4,#200
04F2 00              620               NOP
04F3 00              621               NOP
04F4 00              622               NOP
04F5 DCFB            623               DJNZ R4,$-3

⌨️ 快捷键说明

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