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

📄 example34.lst

📁 0.5秒定时刷新数码管 一路输入的录音 32Kflash读写 AD转换 单片机程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     <      	
                     <      	.EXTERNAL	F_SP_Get_ADC
                     <      	
                     <      	.EXTERNAL 	F_SP_Set_P_TimerA_Ctrl
                     <      	.EXTERNAL 	F_SP_Set_P_TimerA_Data
                     <      	.EXTERNAL 	F_SP_Set_P_TimerB_Ctrl
                     <      	.EXTERNAL 	F_SP_Set_P_TimerB_Data
                     <      	.EXTERNAL 	F_SP_Set_P_INT_Ctrl
                     <      	.EXTERNAL 	F_SP_Set_P_INT_Clear
                     <      	.EXTERNAL 	F_SP_Set_P_SystemClock
                     <      	.EXTERNAL 	F_SP_Set_P_DAC_Ctrl
                     <      	.EXTERNAL 	F_SP_Set_P_ADC_Ctrl
                     <      	
                     <      		
                     <      	
                     <      	//--------------------------------------------
                     <      	SACM_MACRO1: 	.MACRO
                     <      		
                     <      		.ENDM
                     <      	
                     <      	SACM_MACRO2:	.MACRO
                     <      		
                     <      		.ENDM
                     <      	
                     <      	
                     <      	
                     <      	
                     <      	//.define PC_Play_Enable_A2000		1    	// Enable the PC-Play function for SACM-A2000 module
                     <      	//.define PC_Play_Enable_S480		1    	// Enable the PC-Play function for SACM-S480 module
                     <      	//.define PC_Play_Enable_S240		1    	// Enable the PC-Play function for SACM-S240 module    
                     <      	//.define PC_Play_Enable_MS01		1    	// Enable the PC-Play function for SACM-MS01 module
                     <      	
                     <      	
                     <      	
                     <      	//========================================================================================        
                     <      	// End of hardware.inc
                     <      	//========================================================================================
                            	
                            			.define RUN_1KHz_TimeBase_INT 0x0010
                            	
00000000                    			.ram
00000000 00 00 00 00        	DisplayBuff:	.DW 4 DUP(0)				//定义一个4存储单元的显示缓冲区,存入显示内容
         00 00 00 00
                            	
000080B8                    			.DATA
                            	DispTbl:								//显示段码表
000080B8 3F 00 06 00        			.DW 0x003F,0x0006,0x005B,0x004F,0x0066		//0,1,2,3,4
         5B 00 4F 00
         66 00      
000080BD 6D 00 7D 00        			.DW 0x006D,0x007D,0x0007,0x007F,0x006F		//5,6,7,8,9
         07 00 7F 00
         6F 00      
000080C2 77 00 7C 00        			.DW 0x0077,0x007C,0x0039,0x005E,0x0079		//A,b,C,d,E
         39 00 5E 00
         79 00      
000080C7 71 00 73 00        			.DW 0x0071,0x0073,0x00FF,0x0000				//F,P,全亮,全灭
         FF 00 00 00
                            	
                            	KeyTbl:								        //键盘编码表
000080CB 7F 00 BF 00        			.DW 0x007F,0x00BF,0x00DF,0x00EF		//K1,K2,K3,K4
         DF 00 EF 00
000080CF F7 00 FB 00        			.DW 0x00F7,0x00FB,0x00FD,0x00FE		//K5,K6,K7,K8
         FD 00 FE 00
                            	
00000004                    			.ram
00000004 00 00              			.var NewKey
                            	
00008091                    			.code
                            			.public _main
                            	//============================================================= 
                            	// 函数名称:  _main
                            	// 功能描述: 初始化及调用显示子程序
                            	// 语法格式:  _main
                            	//入口参数:     无
                            	// 出口参数:    无
                            	// 注意事项:    仅为用户模型
                            	//=================================================================
                            	_main:
00008091 09 93 FF 01        			r1=0x01FF;						//初始化IOA0~IOA7为低电平输出口
00008093 19 D3 02 70        			[P_IOA_Dir]= r1;
00008095 19 D3 03 70        			[P_IOA_Attrib]= r1;
00008097 09 93 00 01        			r1=0x0100;						//IOA8输出高电平,屏蔽按键
00008099 19 D3 00 70        			[P_IOA_Data]= r1;
0000809B 7C 92              			r1=0x003C;						//初始化IOB2~IOB5为低电平输出口
0000809C 19 D3 07 70        			[P_IOB_Dir]= r1;
0000809E 19 D3 08 70        			[P_IOB_Attrib]= r1;
000080A0 40 92              			r1=0x0000;
000080A1 19 D3 05 70        			[P_IOB_Data]= r1;
000080A3 40 92              			r1=0x0000
000080A4 19 D3 04 00        			[NewKey]= r1
000080A6 0D 9B 00 00        			BP=DisplayBuff					//设置显示缓冲区
000080A8 52 92              			r1=0x0012						//第123位数码管全灭
000080A9 D5 D2              			[BP++]= r1
000080AA D5 D2              			[BP++]= r1
000080AB D5 D2              			[BP++]= r1
000080AC 50 92              			r1=0x0010						//第4位数码管显示P
000080AD D5 D2              			[BP++]= r1
000080AE 50 92              			r1=RUN_1KHz_TimeBase_INT			//开放1KHz中断
000080AF 19 D3 10 70        			[P_INT_Ctrl]= r1
000080B1 41 F1              			int IRQ
                            	Loop:
000080B2 41 92              			r1=0x0001                    		//清看门狗
000080B3 19 D3 12 70        			[P_Watchdog_Clear]=r1
000080B5 40 F0 2E 80        			CALL Display
000080B7 46 EE              			JMP Loop		
                            	
00008009                    			.text	
                            			.public _IRQ4		
                            	//============================================================= 
                            	// 函数名称:  _IRQ4
                            	// 功能描述:  IRQ4中断有三个中断源:1KHz、2KHz、4KHz,1KHz中断内扫描键盘
                            	//入口参数:     无
                            	// 出口参数:    DisplayBuff
                            	// 注意事项:    仅为用户模型
                            	//=================================================================
                            	_IRQ4:
00008009 A8 DA              			PUSH R1,R5 to [SP]
0000800A 50 92              			r1=0x0010 	
0000800B 11 C3 10 70        			TEST R1,[P_INT_Ctrl]				//是否为1KHz中断
0000800D 0F 4E              			JNZ  IRQ4_1K		 		  		//1KHz中断
0000800E 60 92              			r1=0x0020 	
0000800F 11 C3 10 70        			TEST r1,[P_INT_Ctrl] 	  			//是否为2KHz中断
00008011 06 4E              			JNZ  IRQ4_2K 			 	    	//2KHz中断 
                            	IRQ4_4K:					
00008012 09 93 40 00        			r1=0x0040
00008014 19 D3 11 70        			[P_INT_Clear]=r1         
00008016 A8 90              			POP r1,r5 FROM [SP]   
00008017 98 9A              			RETI
                            	IRQ4_2K:
00008018 60 92              			r1=0x0020
00008019 19 D3 11 70        			[P_INT_Clear]=r1         
0000801B A8 90              			POP r1, r5 FROM [SP]   
0000801C 98 9A              			RETI
                            	IRQ4_1K:
0000801D 40 F0 45 80        			CALL CheckKeypad					//扫描键盘
0000801F 09 93 FF 01        			r1=0x01FF;						    //恢复A0~A7输出
00008021 19 D3 02 70        			[P_IOA_Dir]= r1;
00008023 19 D3 03 70        			[P_IOA_Attrib]= r1;
00008025 09 93 00 01        			r1=0x0100;						    //IOA8输出高电平,屏蔽键盘
00008027 19 D3 00 70        			[P_IOA_Data]= r1;
00008029 50 92              			r1=0x0010
0000802A 19 D3 11 70        			[P_INT_Clear]= r1
0000802C A8 90              			POP r1, r5 FROM [SP]
0000802D 98 9A              			RETI
                            	////////////////////////////////////////////////////////////////////////////////
                            	//数码管显示程序
                            	//原理:从A0-A7输出段码,从B2-B5输出位码,均为高电平有效
                            	//入口:显示缓冲区DisplayBuff
                            	//出口:无
                            	///////////////////////////////////////////////////////////////////////////////
                            	Display:	.proc
0000802E 40 96              			r3=0x0000;						//初始化计数初值
0000802F 0A 95 00 00        			r2=DisplayBuff;						// r2指向显示缓冲区
00008031 44 98              			r4=0x0004;						//显示位码
                            	Next:
00008032 40 92              			r1=0x0000						//暂时关闭所有的数码管
00008033 19 D3 05 70        			[P_IOB_Data]= r1
00008035 0D 9B B8 80        			BP=DispTbl;						//BP指向段码表
00008037 D2 92              			r1=[R2++];						//从显示缓冲区内取显示内容(即偏移量)
00008038 01 0B              			BP+= r1;							//段码表首地址加上偏移量
00008039 C5 92              			r1=[BP];							//从段码表中取出段码
0000803A 09 A3 00 01        			r1|=0x0100
0000803C 19 D3 00 70        			[P_IOA_Data]= r1;					//送出段码
0000803E 1C D9 05 70        			[P_IOB_Data]=r4;					//送出位码
00008040 44 99              			r4= r4 LSL 1;						//修改位码,以便下一位显示
00008041 41 06              			r3+=0x0001;						//计数器加1
00008042 44 46              			CMP r3,0x0004						//4位数据显示完否
00008043 52 0E              			JB Next							//未显示完
00008044 90 9A              			RETF
                            			.endp
                            	/////////////////////////////////////////////////////////////////////////////////		
                            	//键盘扫描程序
                            	//A0~A7接键盘的8条列线,A8接键盘的行线。当A0~A7置为上拉输入口、A8置为低电平输出口时,
                            	//若无键按下,从A0~A7将输入FF;当有某个键按下,相应A0~A7某位将输入0,得到键码。8个
                            	//按键对应8个键码:
                            	//		.DW 0x007F,0x00BF,0x00DF,0x00EF	//K1,K2,K3,K4
                            	//		.DW 0x00F7,0x00FB,0x00FD,0x00FE	//K5,K6,K7,K8
                            	//将8位的键码做8-3编码,得到8个按键的键值:0-7
                            	//入口:无
                            	//出口:DisplayBuff
                            	///////////////////////////////////////////////////////////////////////////////////
                            	CheckKeypad:	.proc	
00008045 40 92              			R1=0x0000	
00008046 19 D3 00 70        			[P_IOA_Data]=R1                 //数据清零,防止误显示					
00008048 19 D3 05 70        			[P_IOB_Data]=R1                 //屏蔽数码管显示
0000804A 09 93 00 01        			R1=0x0100						//A0-A7为上拉输入口,A8输出低电平
0000804C 19 D3 02 70        			[P_IOA_Dir]=R1
0000804E 19 D3 03 70        			[P_IOA_Attrib]=R1
00008050 09 93 FF FE        			R1=0xfeff
00008052 19 D3 00 70        			[P_IOA_Data]=R1
00008054 00 EE              			NOP
00008055 00 EE              			NOP
00008056 00 EE              			NOP
00008057 00 EE              			NOP
00008058 00 EE              			NOP
00008059 11 93 00 70        			r1=[P_IOA_Data]					//读入键码
0000805B 09 B3 FF 00        			r1&=0x00ff						//屏蔽高8位
0000805D 09 43 FF 00        			CMP R1,0x00ff
0000805F 13 5E              			JE NoKey							//无键处理
00008060 11 43 04 00        			CMP r1,[NewKey]					//是否是新键
00008062 10 5E              			JE NoKey							//否
00008063 19 D3 04 00        			[NewKey]= r1						//保存键码
00008065 0D 9B CB 80        			BP=KeyTbl						//对键码进行8-3编码,使K1~K7对应0~7键值
00008067 40 92              			r1=0x0000
                            	Check:
00008068 D5 96              			r3=[BP++]
00008069 13 47 04 00        			CMP r3,[NewKey]
0000806B 04 5E              			JE Key
0000806C 41 02              			r1+=0x0001
0000806D 48 42              			CMP r1,0x0008
0000806E 04 5E              			JE NoKey
0000806F 48 EE              			JMP Check
                            	Key:
00008070 0D 9B 00 00        			BP=DisplayBuff					//修改显示缓冲区
00008072 03 D2              			[BP+0x03]=r1
                            	NoKey:
00008073 90 9A              			RETF
                            			.endp
0 error(s), 0 warning(s).

⌨️ 快捷键说明

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