📄 main.s
字号:
.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 + -