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

📄 main.s

📁 此程序是用CYPRESS单片机编写
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile ./main.c
	.dbfunc e initializtion_deal _initializtion_deal fV
_initializtion_deal::
	.dbline -1
	.dbline 93
; //***********************************************************************
; //*                                                                     *
; //*    Filename:      Freq_occur_ad_to_pwm\main.c                       *
; //*    Date:          2006/3/2                                          *
; //*    File Version:  V1.0                                              *
; //*                                                                     *
; //*    Author:        Cxb                                               *
; //*    Company:                                                         *
; //*                                                                     *
; //***********************************************************************
; //*                                                                     *
; //*    Files required:CYPRESS CY8C24123的数据手册                       *
; //*                   频率发生器功能说明书                              *
; //*                                                                     *
; //***********************************************************************
; //*                                                                     *
; //*    Notes: DISPLAY MODEL:    LED DISPLAY                             *
; //*           MICROCOMPUTER:    CYPRESS CY8C24423A(28PIN SSOP)         *
; //*           CRYSTAL:          石英晶振32.768KHz(倍频到24MHz)        *
; //*                                                                     *
; //***********************************************************************
; 
; //-----------------------------------------------------------------------
; // C main line
; //-----------------------------------------------------------------------
; 	
; #include <m8c.h>        // part specific constants and macros
; #include "PSoCAPI.h"    // PSoC API definitions for all User Modules
; 
; 
; //*************************************
; //
; // 定义中断处理程序
; //
; #pragma interrupt_handler Timer8_ISR	// Timer8溢出中断的中断向量
; 
; 
; //*************************************
; //
; // 定义全局变量
; //
; 
; unsigned int	iTEMP;
; unsigned int	CLOCK_DATA_NEW,CLOCK_DATA_SET;		// 时钟数据(以分钟为单位)
; unsigned int	BESPEAK_1_TIME_NEW,BESPEAK_1_TIME_SET;	// 预约一时间(00:00--23:59小时,24:00以上为--)
; unsigned int	AD_VALUE[8];
; 
; unsigned long	lTEMP;
; 
; unsigned char	cTEMP,cTEMP_H,cTEMP_L;
; unsigned char	FLAG0,FLAG1,FLAG2;
; unsigned char	T_10MS,T_1S,T_3S,T_10S,T_SLEEP_1M,T_FLASH_500MS,T_CLOCK_500MS,T_HEAT_UP_1M,T_HEAT_UP_4H,T_50MS;
; unsigned char	BUZZ_EN,BUZZ_NEW,BUZZ_COU;		// 蜂鸣器状态
; unsigned char	AD_COUNT,AD_ROOM_TMP;
; unsigned char	SET_TMP_NEW,SET_TMP_SET;
; unsigned char	ERROR_NEW;		// 故障状态:0=无故障,1=漏电保护,2=超高温,3=温度传感器短/开路,4=防干烧
; unsigned char	DISP_BIT,DISP_DATA_1,DISP_DATA_2,DISP_DATA_3,DISP_DATA_4,DISP_DATA_5,DISP_DATA_6;
; unsigned char	KEY_CODE,KEY_COU,KEY_NEW,T_ON_OFF_4S,KEY_SET,KEY_SERIES_NEW,KEY_SERIES_COU,T_KEY_60S;
; unsigned char	OFF_FUNCTION;		// 待机功能状态:0=待机默认,1=设定时钟
; unsigned char	ON_FUNCTION;		// 工作功能状态:0=工作默认,1=设定水温,2=预约一
; unsigned char	BESPEAK_DISP;		// 预约显示状态:0=预约温度,1=预约时间
; unsigned char	BESPEAK_BIT;		// 预约状态:0=预约1无效,1=预约1有效
; unsigned char	BESPEAK_UP_BIT;		// 预约时间到:0=预约1时间未到,1=预约1时间到
; unsigned char	BESPEAK_1_TMP_NEW,BESPEAK_1_TMP_SET;
; unsigned char	POWER_EN;
; unsigned char	KEY_CREEPAGE,T_CHECK_500MS,CREEPAGE_COU;
; unsigned char	ROOM_RISE,T_RISE_6S;
; 
; //FLAG0.0	;1=
; //FLAG0.1	;1=
; //FLAG0.2	;1=
; //FLAG0.3	;1=
; //FLAG0.4	;1=
; //FLAG0.5	;1=
; //FLAG0.6	;1=
; //FLAG0.7	;1=
; 
; //FLAG1.0	;1=
; //FLAG1.1	;1=
; //FLAG1.2	;1=
; //FLAG1.3	;1=
; //FLAG1.4	;1=
; //FLAG1.5	;1=
; //FLAG1.6	;1=
; //FLAG1.7	;1=
; 
; 
; //*************************************
; //
; // 函数initializtion_deal()为:初始化处理子程序
; //
; void initializtion_deal()
; {
	.dbline 94
; 	PGA_Start(PGA_MEDPOWER);	// Turn on PGA power
	push X
	mov A,2
	xcall _PGA_Start
	.dbline 95
; 	ADCINC14_Start(ADCINC14_HIGHPOWER);// Turn on Analog section
	mov A,3
	xcall _ADCINC14_Start
	.dbline 96
; 	ADCINC14_GetSamples(0);		// Start ADC to read continuously
	mov A,0
	xcall _ADCINC14_GetSamples
	.dbline 97
; 	Timer8_Start();
	xcall _Timer8_Start
	.dbline 98
; 	Timer8_EnableInt();		// Enable Timer8 Interrupt
	xcall _Timer8_EnableInt
	pop X
	.dbline -2
	.dbline 103
; //	PWM16_WritePeriod(999);		// Set period to eight clocks
; //	PWM16_WritePulseWidth(332);	// Set pulse width to generate a 50% duty cycle
; //	PWM16_DisableInt();		// Ensure interrupt is disabled
; //	PWM16_Start();			// Start the PWM16
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ad_conv_deal _ad_conv_deal fV
_ad_conv_deal::
	.dbline -1
	.dbline 111
; 
; 
; //*************************************
; //
; // 函数ad_conv_deal()为:AD采样处理子程序
; //
; void ad_conv_deal()
; {
L3:
	.dbline 113
L4:
	.dbline 113
	push X
	xcall _ADCINC14_fIsDataAvailable
	pop X
	cmp A,0
	jz L3
	.dbline 114
	push X
	xcall _ADCINC14_iGetData
	mov [__r1],A
	mov [__r0],X
	pop X
	mov [__r3],[_AD_COUNT]
	mov [__r2],0
	asl [__r3]
	rlc [__r2]
	add [__r3],<_AD_VALUE
	adc [__r2],>_AD_VALUE
	mov A,[__r0]
	mvi [__r3],A
	mov A,[__r1]
	mvi [__r3],A
	.dbline 115
	push X
	xcall _ADCINC14_ClearFlag
	pop X
	.dbline 117
	inc [_AD_COUNT]
	.dbline 118
	mov A,7
	cmp A,[_AD_COUNT]
	jnc L6
X0:
	.dbline 119
	.dbline 120
	mov [_AD_COUNT],0
	.dbline 121
	mov A,[_AD_VALUE+1]
	add A,[_AD_VALUE+2+1]
	mov [__r1],A
	mov A,[_AD_VALUE]
	adc A,[_AD_VALUE+2]
	mov [__r0],A
	mov A,[_AD_VALUE+4+1]
	add [__r1],A
	mov A,[_AD_VALUE+4]
	adc [__r0],A
	mov A,[_AD_VALUE+6+1]
	add [__r1],A
	mov A,[_AD_VALUE+6]
	adc [__r0],A
	mov A,[_AD_VALUE+8+1]
	add [__r1],A
	mov A,[_AD_VALUE+8]
	adc [__r0],A
	mov A,[_AD_VALUE+10+1]
	add [__r1],A
	mov A,[_AD_VALUE+10]
	adc [__r0],A
	mov A,[_AD_VALUE+12+1]
	add [__r1],A
	mov A,[_AD_VALUE+12]
	adc [__r0],A
	mov A,[_AD_VALUE+14+1]
	add [__r1],A
	mov A,[_AD_VALUE+14]
	adc [__r0],A
	mov [_lTEMP+3],[__r1]
	mov [_lTEMP+2],[__r0]
	mov [_lTEMP+1],0
	mov [_lTEMP],0
	.dbline 122
	mov [__r0],[_lTEMP]
	mov [__r1],[_lTEMP+1]
	mov [__r2],[_lTEMP+2]
	mov [__r3],[_lTEMP+3]
	mov A,3
X1:
	and F,-5
	rrc [__r0]
	rrc [__r1]
	rrc [__r2]
	rrc [__r3]
	dec A
	jnz X1
	mov [__r1],[__r3]
	mov [__r0],[__r2]
	mov [_AD_VALUE+1],[__r1]
	mov [_AD_VALUE],[__r0]
	.dbline 123
L6:
	.dbline -2
	.dbline 124
; 	// (Do something useful with the data)
; 	while(ADCINC14_fIsDataAvailable()==0);	// Wait for data to be ready
; 	AD_VALUE[AD_COUNT] = ADCINC14_iGetData();		// Get Data
; 	ADCINC14_ClearFlag();			// Clear data ready flag
; 	
; 	AD_COUNT++;
; 	if(AD_COUNT>7)		// 采样4次后
; 	{
; 		AD_COUNT=0;
; 		lTEMP=AD_VALUE[0]+AD_VALUE[1]+AD_VALUE[2]+AD_VALUE[3]+AD_VALUE[4]+AD_VALUE[5]+AD_VALUE[6]+AD_VALUE[7];
; 		AD_VALUE[0]=lTEMP>>3;
; 	}
; }
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e key_scan_deal _key_scan_deal fV
_key_scan_deal::
	.dbline -1
	.dbline 132
; 
; 
; //*************************************
; //
; // 函数key_scan_deal()为:按键扫描处理子程序
; //
; void key_scan_deal()
; {
	.dbline 133
; 	PRT0DR=0xFF;	// 将P0口置1
	mov REG[ 0],-1
	.dbline 136
; 	//PRT0GS=0xD4;
; 	//PRT0DM2=0xD5;
; 	PRT0DM1=0xD5;
	or F,0x10  ; iopage = 1
	mov REG[0x1],-43
	.dbline 137
; 	PRT0DM0=0x2A;	// 将P0.2/P0.4/P0.6/P0.7置为输入口
	mov REG[ 0],42
	and F,0xEF ; iopage = 0
	.dbline 138
; 	cTEMP=10;
	mov [_cTEMP],10
	xjmp L17
L16:
	.dbline 140
	.dbline 141
		NOP

	.dbline 142
	dec [_cTEMP]
	.dbline 143
L17:
	.dbline 139
; 	while(cTEMP!=0)
	cmp [_cTEMP],0
	jnz L16
	.dbline 145
; 	{
; 		asm("NOP");
; 		cTEMP--;
; 	}
; 			//*****按键检测*****
; 	KEY_CODE=0;
	mov [_KEY_CODE],0
	.dbline 146
; 	if((PRT0DR&0x04)==0)	KEY_CODE|=0x01;	// 工作/待机键
	tst REG[ 0],4
	jnz L19
	.dbline 146
	or [_KEY_CODE],1
L19:
	.dbline 147
; 	if((PRT0DR&0x10)==0)	KEY_CODE|=0x02;	// 预约使用键
	tst REG[ 0],16
	jnz L21
	.dbline 147
	or [_KEY_CODE],2
L21:
	.dbline 148
; 	if((PRT0DR&0x40)==0)	KEY_CODE|=0x04;	// 时钟/温度键
	tst REG[ 0],64
	jnz L23
	.dbline 148
	or [_KEY_CODE],4
L23:
	.dbline 149
; 	if((PRT0DR&0x80)==0)	KEY_CODE|=0x08;	// 即时加热键
	tst REG[ 0],-128
	jnz L25
	.dbline 149
	or [_KEY_CODE],8
L25:
	.dbline 152
; 			
; 			//*****开始扫描*****
; 	if(KEY_CODE!=0)	//***有键按下***
	cmp [_KEY_CODE],0
	jz L27
	.dbline 153
; 	{
	.dbline 154
; 		KEY_COU++;
	inc [_KEY_COU]
	.dbline 155
; 		if(KEY_COU>=2)
	cmp [_KEY_COU],2
	jc L28
X2:
	.dbline 156
; 		{
	.dbline 157
; 			KEY_COU=5;
	mov [_KEY_COU],5
	.dbline 158
; 			if(KEY_CODE==0x01)
	cmp [_KEY_CODE],1
	jnz L31
	.dbline 159
; 			{
	.dbline 160
; 				KEY_NEW=1;			// 工作/待机键
	mov [_KEY_NEW],1
	.dbline 161
; 				T_ON_OFF_4S++;
	inc [_T_ON_OFF_4S]
	.dbline 162
; 				if(T_ON_OFF_4S>=250)
	cmp [_T_ON_OFF_4S],-6
	jc L28
X3:
	.dbline 163
; 				{
	.dbline 164
; 					T_ON_OFF_4S=250;
	mov [_T_ON_OFF_4S],-6
	.dbline 165
; 					KEY_SET=5;		// 童锁键,即按下工作/待机键>4s
	mov [_KEY_SET],5
	.dbline 166
; 				}
	.dbline 167
; 			}
	xjmp L28
L31:
	.dbline 168
; 			else if(KEY_CODE==0x02)	KEY_NEW=2;	// 预约使用键
	cmp [_KEY_CODE],2
	jnz L35
	.dbline 168
	mov [_KEY_NEW],2
	xjmp L28
L35:
	.dbline 169
; 			else if(KEY_CODE==0x04)
	cmp [_KEY_CODE],4
	jnz L37
	.dbline 170
; 			{
	.dbline 171
; 				KEY_NEW=3;			// 时钟/温度键
	mov [_KEY_NEW],3
	.dbline 172
; 				if(KEY_SERIES_NEW==0)
	cmp [_KEY_SERIES_NEW],0
	jnz L28
	.dbline 173
; 				{
	.dbline 174
; 					KEY_SERIES_NEW=1;
	mov [_KEY_SERIES_NEW],1
	.dbline 175
; 				}
	.dbline 176
; 			}
	xjmp L28
L37:
	.dbline 177
; 			else if(KEY_CODE==0x08)	KEY_NEW=4;	// 即时加热键
	cmp [_KEY_CODE],8
	jnz L41
	.dbline 177
	mov [_KEY_NEW],4
	xjmp L28
L41:
	.dbline 178
; 			else			KEY_NEW=0;
	mov [_KEY_NEW],0
	.dbline 179
; 		}
	.dbline 180
; 	}
	xjmp L28
L27:
	.dbline 182
; 	else		//***无键按下***
; 	{
	.dbline 183
; 		if(T_ON_OFF_4S<250&&KEY_COU>=5&&KEY_SERIES_NEW<2)
	cmp [_T_ON_OFF_4S],-6
	jnc L43
X4:
	cmp [_KEY_COU],5
	jc L43
X5:
	cmp [_KEY_SERIES_NEW],2
	jnc L43
X6:
	.dbline 184
; 		{
	.dbline 185
; 			KEY_SET=KEY_NEW;	// 不是童锁键,并且其它按键有效,在释放时工作
	mov [_KEY_SET],[_KEY_NEW]
	.dbline 186
; 		}
	xjmp L44
L43:
	.dbline 187
; 		else	KEY_SET=0;
	mov [_KEY_SET],0
L44:
	.dbline 188
; 		KEY_COU=0;
	mov [_KEY_COU],0
	.dbline 189
; 		KEY_NEW=0;
	mov [_KEY_NEW],0
	.dbline 190
; 		T_ON_OFF_4S=0;
	mov [_T_ON_OFF_4S],0
	.dbline 191
; 		FLAG0&=0xFC;	// FLAG0.0/FLAG0.1=0
	and [_FLAG0],-4
	.dbline 192
; 		KEY_SERIES_NEW=0;
	mov [_KEY_SERIES_NEW],0
	.dbline 193
; 		KEY_SERIES_COU=0;
	mov [_KEY_SERIES_COU],0
	.dbline 194
; 	}
L28:
	.dbline 197
; 	//PRT0GS=0;
; 	//PRT0DM2=0x01;
; 	PRT0DM1=0x01;
	or F,0x10  ; iopage = 1
	mov REG[0x1],1
	.dbline 198
; 	PRT0DM0=0xFE;	// 将P0.2/P0.4/P0.6/P0.7置为输出口
	mov REG[ 0],-2
	and F,0xEF ; iopage = 0
	.dbline -2
	.dbline 199
; }
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e key_deal _key_deal fV
_key_deal::
	.dbline -1
	.dbline 207
; 
; 
; //*************************************
; //
; // 函数key_deal()为:按键处理子程序
; //
; void key_deal()
; {
	.dbline 208
; 	if(KEY_SET==0)	return;
	cmp [_KEY_SET],0
	jnz L46

⌨️ 快捷键说明

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