📄 my_pt2314.lst
字号:
0499 1200D8 +1 745 LCALL OPREAT
049C D202 +1 746 SETB RE_KEY
049E 61C2 +1 747 AJMP LINE1
+1 748 ;----------------
+1 749
+1 750
+1 751 ;**************************************
04A0 +1 752 KEYWAIT:
04A0 91B0 +1 753 ACALL KEYDELAY
04A2 91B0 +1 754 ACALL KEYDELAY
+1 755 ;KW:
+1 756 ;MOV KEY_IO,#11110000B
+1 757 ;MOV A,KEY_IO
+1 758 ;CJNE A,#11110000B,KW
04A4 22 +1 759 RET
04A5 +1 760 KEYWAIT_SOTP:
04A5 91B0 +1 761 ACALL KEYDELAY
+1 762 ;ACALL KEYDELAY
04A7 +1 763 KW:
04A7 75A0F0 +1 764 MOV KEY_IO,#11110000B
04AA E5A0 +1 765 MOV A,KEY_IO
04AC B4F0F8 +1 766 CJNE A,#11110000B,KW
04AF 22 +1 767 RET
+1 768 ;**************************************
04B0 +1 769 KEYDELAY:
04B0 C000 +1 770 PUSH 00H
04B2 C001 +1 771 PUSH 01H
04B4 78FF +1 772 MOV R0,#255
04B6 +1 773 LOOP1:
04B6 79FF +1 774 MOV R1,#255
04B8 +1 775 LOOP2:
+1 776 ;CPL BUZZER
04B8 D9FE +1 777 DJNZ R1,LOOP2
04BA D8FA +1 778 DJNZ R0,LOOP1
04BC D001 +1 779 POP 01H
04BE D000 +1 780 POP 00H
04C0 22 +1 781 RET
+1 782 ;*******************************
A51 MACRO ASSEMBLER MY_PT2314 03/02/2006 09:51:14 PAGE 13
783
784 ;$include (LCM1602-4.ASM)
0080 +1 785 RS EQU P0.0 ;LCM_RS_PIN
0081 +1 786 RW EQU P0.1 ;LCM_RW_PIN
0082 +1 787 E EQU P0.2 ;LCM_E_PIN
0080 +1 788 LCM_D EQU P0 ;LCM接口
0087 +1 789 BF BIT P0.7 ;判断LCM是否忙
0000 +1 790 LCD_BIT BIT 20H.0 ;为0写LCM控制,为1写数值
0070 +1 791 LCM_BUFF DATA 70H ;LCM写缓冲
0045 +1 792 ZLING DATA 45H ;控制缓冲
0046 +1 793 SHUJU DATA 46H ;数值缓冲
+1 794
+1 795 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 796 ;LCM初始化程序
04C1 7580FF +1 797 LCM_RESET: MOV LCM_D, #0FFH
04C4 120504 +1 798 LCALL W_LCD1
04C7 1200CF +1 799 LCALL DELAY10
04CA 120504 +1 800 LCALL W_LCD1
04CD 1200CF +1 801 LCALL DELAY10
04D0 120504 +1 802 LCALL W_LCD1
04D3 1200CF +1 803 LCALL DELAY10
04D6 120504 +1 804 LCALL W_LCD1
04D9 C200 +1 805 CLR LCD_BIT
04DB 75700C +1 806 MOV LCM_BUFF,#0CH
04DE 120509 +1 807 LCALL W_LCD
04E1 C200 +1 808 CLR LCD_BIT
04E3 757001 +1 809 MOV LCM_BUFF,#01H
04E6 120509 +1 810 LCALL W_LCD
04E9 C200 +1 811 CLR LCD_BIT
04EB 757006 +1 812 MOV LCM_BUFF,#06H
04EE 120509 +1 813 LCALL W_LCD
04F1 22 +1 814 RET
+1 815 ;********************************
+1 816 ;以下为LCD各个子程序程序应用部分
+1 817 ;********************************
04F2 +1 818 WRTC: ;写控制
04F2 C200 +1 819 CLR LCD_BIT
04F4 854570 +1 820 MOV LCM_BUFF,ZLING
04F7 120509 +1 821 LCALL W_LCD
04FA 22 +1 822 RET
04FB +1 823 WRTS: ;写数值
04FB D200 +1 824 SETB LCD_BIT
04FD 854670 +1 825 MOV LCM_BUFF,SHUJU
0500 120509 +1 826 LCALL W_LCD
0503 22 +1 827 RET
+1 828 ;==========================================================================
+1 829 ;送控制指令程序
0504 C200 +1 830 W_LCD1: CLR LCD_BIT ;送控制指令程序
0506 757028 +1 831 MOV LCM_BUFF,#28H ;显示模式设置,4位数据,双行显示,5x7点阵
0509 120544 +1 832 W_LCD: LCALL BUSY_WAIT ;BF查询子程序
050C E580 +1 833 MOV A,LCM_D
050E 540F +1 834 ANL A,#0FH ;取出P0口的控制,暂放在R7里
0510 FF +1 835 MOV R7,A
0511 E570 +1 836 MOV A,LCM_BUFF ;取控制或数值
0513 54F0 +1 837 ANL A,#0F0H ;先取高位控制或数值
0515 4F +1 838 ORL A,R7 ;和P0口的控制一起送回P0口
0516 F580 +1 839 MOV LCM_D,A
0518 C281 +1 840 CLR RW
051A 200004 +1 841 JB LCD_BIT,WD_1 ;为0写控制,为1写数值
051D C280 +1 842 CLR RS
051F 8002 +1 843 SJMP WC_1
0521 D280 +1 844 WD_1: SETB RS
0523 D282 +1 845 WC_1: SETB E
0525 C282 +1 846 CLR E
0527 C282 +1 847 CLR E
0529 E570 +1 848 MOV A,LCM_BUFF ;取控制或数值
A51 MACRO ASSEMBLER MY_PT2314 03/02/2006 09:51:14 PAGE 14
052B C4 +1 849 SWAP A ;
052C 54F0 +1 850 ANL A,#0F0H ;取低字节
052E FF +1 851 MOV R7,A
052F E580 +1 852 MOV A,LCM_D ;取出P0口的控制,暂放在R7里
0531 540F +1 853 ANL A,#0FH
0533 4F +1 854 ORL A,R7 ;和P0口的控制一起送回P0口
0534 F580 +1 855 MOV LCM_D,A
0536 200004 +1 856 JB LCD_BIT,WD_2 ;为0写控制,为1写数值
0539 C280 +1 857 CLR RS
053B 8002 +1 858 SJMP WC_2
053D D280 +1 859 WD_2: SETB RS
053F D282 +1 860 WC_2: SETB E
0541 C282 +1 861 CLR E
0543 22 +1 862 RET
+1 863 ;==========================================================================
+1 864 ;BF查询子程序 功能: 直到BF=0才退出该程序
0544 D287 +1 865 BUSY_WAIT: SETB BF
0546 C280 +1 866 CLR RS
0548 D281 +1 867 SETB RW
054A C282 +1 868 CLR E
054C C282 +1 869 CLR E
054E D282 +1 870 SETB E
0550 2087FD +1 871 JB BF,$
+1 872 ;lcall DELAY
0553 22 +1 873 RET
+1 874 ;***********************************
+1 875 ;以上为LCD各个子程序程序应用部分
+1 876 ;***********************************
877
878 ;$include (REMOTE.ASM)
+1 879
00B2 +1 880 REMOTEIN BIT P3.2 ;遥控输入
0040 +1 881 ir_code data 40H ;操作码
0041 +1 882 ir_code_R data 41h ;操作码反码
0042 +1 883 ir_ID_code data 42h ;用户码
0043 +1 884 ir_id_code_r data 43h ;操作反码
0044 +1 885 IR_ADDR DATA 44H
+1 886 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0554 +1 887 REMOTE:
0554 C0E0 +1 888 push acc ;定时1中断子程序
0556 C0D0 +1 889 push psw
0558 C2A8 +1 890 CLR EX0 ;INT0请求中断
055A D2D4 +1 891 SETB rs1 ;选择寄存器组
055C C2D3 +1 892 clr rs0
055E 7D01 +1 893 MOV R5,#1
0560 +1 894 SB:
0560 7CCB +1 895 MOV R4,#203;220;转到882微秒延时判断子程序
0562 +1 896 irD0:
0562 20B24D +1 897 JB REMOTEIN,EXIT
0565 DCFB +1 898 DJNZ R4,irD0 ;延时882微秒中判断P3.3脚是否出现高电平如果有就退出解码程序
0567 DDF7 +1 899 DJNZ R5, SB ;重复'R6次,目的是检测在8820微秒内如果出现高电平就退出解码程序
+1 900 ;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
0569 30B2FD +1 901 JNB REMOTEIN, $ ;等待高电平避开9毫秒低电平引导脉冲
056C B1C4 +1 902 ACALL YS2 ;延时4.74毫秒判断是否连发
+1 903 ;JB REMOTEIN,EXIT ;
056E 791A +1 904 MOV R1,#1AH ;设定1AH为起始RAM区
0570 7A04 +1 905 MOV R2,#4 ;接收从1AH到1DH的4个内存,用于存放操作码和操作反码
0572 +1 906 PP: ;
0572 7B08 +1 907 MOV R3,#8 ;每组数据为8位
0574 +1 908 JJJJ: ;
0574 30B2FD +1 909 JNB REMOTEIN,$ ;等待地址码第一位的高电平信号
0577 1205BB +1 910 LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
057A A2B2 +1 911 MOV C,REMOTEIN ;将P3.2引脚此时的电平状态0或1存入C中
057C 5003 +1 912 JNC UUU ;如果为0就跳转到UUU
057E 1205CD +1 913 LCALL YS3;JB P3.2,$ ;检测到高电平1的话延时882微秒等待脉冲高电平结束
0581 +1 914 UUU: ;
A51 MACRO ASSEMBLER MY_PT2314 03/02/2006 09:51:14 PAGE 15
0581 E7 +1 915 MOV A,@R1 ;将R1中地址的给A
0582 13 +1 916 RRC A ;将C中的值0或1移入A中的最低位
0583 F7 +1 917 MOV @R1,A ;将A中的数暂时存放在R1数值的内存中
0584 DBEE +1 918 DJNZ R3,JJJJ ;接收满8位换一个内存
0586 09 +1 919 INC R1 ;对R1中的值加1,换下一个RAM
0587 DAE9 +1 920 DJNZ R2,PP ;接收完8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH中
+1 921
0589 E51D +1 922 MOV A,1DH
058B B4FF02 +1 923 CJNE A,#0FFH,IR_OK
058E A1B2 +1 924 AJMP EXIT ;如果不相等说明解码失败退出解码程序
0590 +1 925 IR_OK:
0590 A1DF +1 926 AJMP BIJIAO ;如果相等说明解码正确
0592 A1B2 +1 927 AJMP EXIT ;如果不相等说明解码失败退出解码程序
+1 928
+1 929 ;判断在118毫秒内是否有连发码
0594 +1 930 AA:
0594 1200CF +1 931 LCALL DELAY10
0597 7B19 +1 932 MOV R3,#25
0599 +1 933 XX:
0599 B1C4 +1 934 ACALL YS2
059B 30B204 +1 935 JNB REMOTEIN,HH;跳转到判断连发代码是否正确的程序段
059E DBF9 +1 936 DJNZ R3,XX
+1 937 ;JNB REMOTEIN,HH;跳转到判断连发代码是否正确的程序段
05A0 8010 +1 938 JMP EXIT
+1 939 ;连发码判断程序段-----------
05A2 7C04 +1 940 HH: MOV R4,#4
05A4 +1 941 S:
05A4 B1BB +1 942 ACALL YS1;调用882微秒延时子程序
05A6 20B209 +1 943 JB REMOTEIN,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
05A9 DCF9 +1 944 DJNZ R4, S;重复4次,目的是确认连发码的低电平信号波形
05AB 8032 +1 945 JMP BIJIAO
05AD 30B2FD +1 946 JNB REMOTEIN, $ ;等待高电平
05B0 80E2 +1 947 JMP AA
05B2 +1 948 EXIT:
05B2 D2A8 +1 949 SETB EX0 ;INT0请求中断
05B4 D2B2 +1 950 SETB REMOTEIN
05B6 D0D0 +1 951 pop psw
05B8 D0E0 +1 952 pop acc
05BA 32 +1 953 RETI
+1 954 ;-------------------------------------
05BB +1 955 YS1:
05BB 7E12 +1 956 MOV R6,#18 ;精确延时882微秒(18:11.059M,20:12M)
05BD +1 957 D1:
05BD 7F14 +1 958 MOV R7,#20
05BF DFFE +1 959 DJNZ R7,$
05C1 DEFA +1 960 DJNZ R6,D1
05C3 22 +1 961 RET
+1 962 ;
05C4 +1 963 YS2:
05C4 7E09 +1 964 MOV R6,#9 ;精确延时4740微秒(9:11.059M,10:12M)
05C6 +1 965 D2:
05C6 7FEB +1 966 MOV R7,#235
05C8 DFFE +1 967 DJNZ R7,$
05CA DEFA +1 968 DJNZ R6,D2
05CC 22 +1 969 RET
+1 970 ;
05CD +1 971 YS3:
05CD 7E02 +1 972 MOV R6,#2 ;延时子程序3,精确延时1000微秒
05CF +1 973 D3:
05CF 7FF8 +1 974 MOV R7,#248
05D1 DFFE +1 975 DJNZ R7,$
05D3 DEFA +1 976 DJNZ R6,D3
05D5 22 +1 977 RET
+1 978 ;
05D6 +1 979 YS4:
05D6 7EFF +1 980 MOV R6,#255 ;延时子程序3,精确延时4740微秒
A51 MACRO ASSEMBLER MY_PT2314 03/02/2006 09:51:14 PAGE 16
05D8 +1 981 D4:
05D8 7FFF +1 982 MOV R7,#255
05DA DFFE +1 983 DJNZ R7,$
05DC DEFA +1 984 DJNZ R6,D4
05DE 22 +1 985 RET
+1 986 ;-----------------------------------------------
05DF +1 987 BIJIAO:
05DF 851A40 +1 988 mov ir_code,1Ah ;操作原码
05E2 851B41 +1 989 mov ir_code_r,1Bh ;操作反码
05E5 851C42 +1 990 mov ir_id_code,1Ch ;ID原码
05E8 851D43 +1 991 mov ir_id_code_r,1Dh ;ID反码
05EB 200305 +1 992 JB IR_SET_BIT,IR_WORK0
05EE 120F5F +1 993 LCALL DIS_IR_OK
+1 994 ;LCALL IR_SEL
05F1 80BF +1 995 JMP EXIT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -