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

📄 hptv.s

📁 MCU控制程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	.module hptv.c
	.area data(ram, con, rel)
_adc_jg::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\McuControl\hptv.c
	.dbsym e adc_jg _adc_jg A[5:5]c
	.area lit(rom, con, rel)
_uart_command::
	.byte 'P,'O
	.byte 'W,'R
	.dbsym e uart_command _uart_command A[4:4]kc
	.area text(rom, con, rel)
	.dbfile G:\McuControl\hptv.c
	.dbfunc e Clear_Timer_Close_Machine _Clear_Timer_Close_Machine fV
	.even
_Clear_Timer_Close_Machine::
	xcall push_gset2
	.dbline -1
	.dbline 279
; //ICC-AVR application builder : 2006-8-5 21:56:00
; // Target : M16
; // Crystal: 7.3728Mhz
; 
; #include <iom16v.h>
; #include <macros.h>
; #include <eeprom.h>
; //#include "necdecode.h"
; //#include "rc5.c"
; #include "i2c.h" 
; #include "hptvstruct.h"
; typedef unsigned char uchar;
; typedef unsigned int uint;
; /********************************************
; //定义宏
; //设置计数器各种功能时间值
; //关机后,2s 后响应开机信号        0.05*40=2s
; //开机后,20s 后响应关机信号       0.05*400=20s
; //设置pwrbt=1 / 0 时间值           1ms*10=10ms 10+5=15ms
; //设置rest and rest_l 开机时间值   0.05s*24=1.2s 0.05s*28=1.4s
; //设置rest and rest_l 关机时间值   1ms*50=50ms 1ms*80=80s
; //设置rly_on 关机时间值            1ms*200=200ms 
; //设置vs_on  开机时间值            1ms*20=20ms 
; //设置vs_on  关机时间值            1ms*220=220ms 
; //设置开机后pa0从低到高延迟时间值  0.05s*40=2s 
; //设置开机后poer重置延迟时间值     0.05s*12=0.6s 
; //设置power_key donwn时间值        1ms*20=20ms 
; //设置power_on时间值               1ms*200=200s 
; //设置rc5码全部bit长度以及第一、二开始位bit结束位置          
; *********************************************/
; #define   close_to_open_time   40
; #define   open_to_close_time   60      //3s
; #define   pwrbt_high_time      10
; #define   pwrbt_low_time       15
; #define   reset_open_time      28                
; #define   reset_l_open_time    28
; #define   reset_close_time     50
; #define   reset_l_close_time   80
; #define   rly_on_time          200
; #define   vs_on_open_time      20
; #define   vs_on_close_time     220
; #define   pa0_l_open_delay     40
; #define   port_open_machine_delaytime  12
; #define   power_key_down_time  50
; #define   power_on_down_time   50
; 
; #define   ADC_2                2  //ad通道号
; //按键状态
; #define   KEY_POWER            0x40  
; //#define   KEY_ENTER            1
; #define   KEY_SOURCE           0x20
; #define   KEY_CHL              0x10
; #define   KEY_CHH              0x08
; #define   KEY_VOLL             0x04
; #define   KEY_VOLH             0x02
; #define   KEY_MENU             0x01
; 
; 
; #define   KEY_TIME             200  //连续按键处理时间间隔500ms,可更改
;                                     //  联动power_num     
; 
;    
; #define   KEYMENU_MIN          0x80     
; #define   KEYMENU_MAX          0xa2     
; #define   KEYPOWER_MIN         0x00     
; #define   KEYPOWER_MAX         0x20
;   
; //#define   KEYENTER_MIN         ((256/3.3)*2.29)-5     
; //#define   KEYENTER_MAX         ((256/3.3)*2.29)+5     
; #define   KEYCHL_MIN           0x28
; #define   KEYCHL_MAX           0x42
; 
; #define   KEYCHH_MIN           0x4a
; #define   KEYCHH_MAX           0x62
; 
; #define   KEYVOLL_MIN          0x68
; #define   KEYVOLL_MAX          0x80
; 
; #define   KEYVOLH_MIN          0xc3
; #define   KEYVOLH_MAX          0xdb
; 
; #define   KEYSOURCE_MIN        0xa8
; #define   KEYSOURCE_MAX        0xbf
; 
; #define   FAC_OPEN             0x00
; #define   FAC_CLOSE            0xff
; 
; 
; 
; #define   IRDA_WAIT            250  //红外按键第一次击键后关闭时长(单位ms)
; 
; #define   I2C_SEQ              100  //I2C脉宽申请宽度
; 
; #define   HPD123               6
; #define   SPDIF_SW             4
; #define   A_MUTE               0
; #define   RS232_SW1            6
; #define   RS232_SW2            7
; 
; #define   EDID_RWEN            7
; 
; //#define   rc5_bit_length       215
; //#define   rc5_startbit_1_length  8
; //#define   rc5_startbit_2_length  24
; /*********************************************
; //定义变量(按行归类解释)
; //定义计数器计数值,初始值为0,意义对应宏定义   (第1--7行)
; //定义关机到开机和开机到关机状态,当值为1时,表示处于20s和2s计数过程,不可进行相应的关机和开机(8行)
; //定义开关机动作开始,可以告诉计数器计数开始   (第9行)
; //定义开机和关机使能状态(10行)
; //定义开机和关机控制信号使能状态(11--12行)
; //rc5码各对应变量(13--18行)
; *********************************************/
; unsigned char close_to_open_count;
; unsigned int  open_to_close_count;
; unsigned char pwrbt_count;
; unsigned char reset_open_count,reset_close_count;
; unsigned char rly_on_count;
; unsigned char vs_on_open_count,vs_on_close_count;
; unsigned char power_key_down_count,power_key_on_count;
; unsigned char power_on_on_count,power_on_down_count;
; unsigned char close_to_open_station,open_to_close_station;      //用于开关机转换等待时间计数
; unsigned char machine_open_start,machine_close_start;           //开关机开始时给计数器开始使能
; unsigned char close_machine_enable,open_machine_enable;
; 
; uchar   power_down_count;   //掉电检测时间计数器
; uchar   power_check_up;     //掉电检测关机后重新开机标志
; unsigned char adc_jg[5]={0,0,0,0,0};
; unsigned char adc_rel;      //ad转换结果
; unsigned char adc_num;      //累计5次ad次数后算转换平均值
; uchar  key_jg[3];           //累计3次结果相同则按键值有效
; uchar  key_num;             //按键累计
; uchar  key,key_open;        //键值,按键打开标志
; uchar  time0_num,time1_num; //
; uchar  time0_b,time1_b;     //time0标志
; uchar  timer1_b;             //time1标志
; uchar  time1s_num,time1s_b; //1s计数
; uchar  timer_s;             //当前9s内的s数
; uchar  OpenTime_b;          //开机时间判断
; uchar  CloseTime_b;         //关机时间判断
; uchar  opentime_min;
; uchar  closetime_min;
; uchar  key_b;               //按键处理标志
; uint   keycl_num;           //按键处理时间间隔
; uchar  command_2d;          //2d命令判断
; 
; uchar  fac_state;           //工厂状态,需在e2prom中保存
; uchar  power_num;           //power键8s计时   KEY_TIME*16 (500*16)次
; uchar  s8_state;            //8s工厂状态检测
; uchar  pb_state;            //b口状态
; uchar  pb_num,pbcheck_num;  //pb检测时间计时,状态变化确认计时 
; uchar  iocheck_num;         //
; uchar  u0check_num;         //串口0数据超时检测计时
; uchar  uart0_b,uart0_num;             //启动超时检测
; const  uchar  uart_command[4]={'P','O','W','R'};
; uchar  uart0_buffer[5];
; uchar  i2cexint_num,i2c_b;        //
; uchar  i2c_command;
; //uchar  irda_num;             //
; uchar  set_time;            //设置时间标志
; uchar  STATE;
; 
; unsigned char CloseTimeMin_b;
; 
; struct T
; {
;   unsigned long TL;
;   unsigned int  TH;
; };
; union OTime
; {
;   unsigned long Ontime;  //开机时间
;   char   OBit[4];
; }OpenTime;
; union CTime              //关机时间
; {
;   unsigned long Cstime;
;   char   CBit[4];
; }CloseTime;
; union TimeValume         //时间参数
; {
;   struct T VS;
;   char    CBit[6];
; }Time;
; //TimeValume Time;
; //外部函数声明
; extern void i2cSetSlaveReceiveHandler(void (*i2cSlaveRx_func)(unsigned char receiveDataLength, unsigned char* recieveData));
; extern void i2cSetSlaveTransmitHandler(unsigned char (*i2cSlaveTx_func)(unsigned char transmitDataLengthMax, unsigned char* transmitData));
; //从函数声明
; extern void i2cSlaveReceiveService(unsigned char receiveDataLength, unsigned char* receiveData);
; //从函数声明
; extern unsigned char i2cSlaveTransmitService(unsigned char transmitDataLengthMax, unsigned char* transmitData);
; extern void i2cInit(void);
; //extern void i2cSetLocalDeviceAddr(unsigned char deviceAddr);
; 
; //################################################
; 
; //NEC码解码部分变量声明-从此开始
; extern unsigned char  BTheFirstFallEdge; //为0时说明为接收到第一个下降沿或接受到第一个;为1时认为已接收到了第一个或大于1个下降沿;做为起始时间基准
; extern unsigned char  BReceiveStart;    //开始接收数据标志
; extern unsigned char  BNecFallEdge;     //是否有下降边沿
; extern unsigned char  TimeNecFallEdge;  //下降边沿时间长度
; extern unsigned char  RTimeNecFallEdge; //下降边沿时间长度结果保存
; extern unsigned char  BNecStartBit;	 //是否有起始位
; extern unsigned char  NecData[4];		 //红外数据
; extern unsigned int   NecDecodeNum;	 //红外数据位个数指针
; extern unsigned int   i;
; extern unsigned char  BHasReceiveNec;   //已收到一个NEC码 为进行接收重复码做准备
; extern unsigned char  BPowerButton;     //有开机按键
; extern unsigned int   NecRepeatCodeNum; //重复码与上一个NEC码时间间隔计数变量和重复码本身长度计数变量
; extern unsigned int   RNecRepeatCodeNum;//重复码计数结果保存
; 
; extern unsigned char  BNecRepeat;       //重复码标志,置1为收到重复码
; extern unsigned char  ResultNec;
; extern unsigned char  RepeatCountFlag;  //为0时为还已收到了一个NEC码还未收到一次重复码,为1时为收到至少一个重复码
; extern unsigned char  BRepeatStar;      //Repeat开始标志 
; extern unsigned char tv_state;           //机器状态位
; extern unsigned char irda_num,irda_b;
; extern unsigned char  i2c_public;           //i2c使用权检测 
; extern unsigned char irda_data;          //预发送数据
; 
; extern unsigned char power_key_open_enable;//
; extern unsigned char power_on_close_enable;//  
; 
; //NEC码解码部分变量声明-到此结束
; //NEC码解码部分外部函数声明-从此开始
; //extern void Head_Reset_Nec_receive();
; //extern void Nec_data_deal_fun(void);
; //extern void Deal_Repeat();
; //extern void Nec_Decode();
; extern void RepeatReceive(void);
; extern void Nec_Receive(void);
; extern void IR_var_init(void);
; //NEC码解码部分外部函数声明-到此结束
; 
; extern unsigned char I2cSendData[I2C_SEND_DATA_BUFFER_SIZE]; 
; extern unsigned char I2cSendDataIndex; 
; extern unsigned char I2cSendDataLength;
; 
; extern unsigned char I2cReceiveData[I2C_RECEIVE_DATA_BUFFER_SIZE]; 
; extern unsigned char I2cReceiveDataIndex; 
; extern unsigned char I2cReceiveDataLength;
; 
; extern unsigned char i2creceive_b;  //接收到命令
; extern unsigned char i2creadtime_b; //
; 
; 
; extern volatile unsigned char Powerdown_signal;
; unsigned char Powerdown_time;
; unsigned char Panel_Open_delay_Signal;
; unsigned char Panel_Open_delay_Time;
; unsigned char KeyResult;
; unsigned char Open_Panel_time;
; unsigned char Open_Panel_flag;
; 
; 
; 
; /*
; typedef enum _TVstate
; {
;    standby,
;    booting,
;    delaying,
;    working,
;    halting
; }TVstate_t;
; */
; 
; volatile TVstate_t System_State;
;    
;    
;    
; 
; 
; 
; 
; 
; void Clear_Timer_Close_Machine()
; {
	.dbline 280
;  CloseTime_b=0;
	clr R2
	sts _CloseTime_b,R2
	.dbline 281
;  CloseTime.Cstime=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _CloseTime+1,R21
	sts _CloseTime,R20
	sts _CloseTime+2+1,R23
	sts _CloseTime+2,R22
	.dbline 282
;  closetime_min=0;
	sts _closetime_min,R2
	.dbline 283
;  CloseTimeMin_b=0;
	sts _CloseTimeMin_b,R2
	.dbline -2
L2:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e start_iocheck _start_iocheck fV
;              i -> R20
	.even
_start_iocheck::
	xcall push_gset1
	.dbline -1
	.dbline 287
; }
; 
; void start_iocheck(void)  //上电检测io,为0则需要发送状态
; {
	.dbline 289
;    uchar i;
;     pb_state=PINB&0x7f;   //保存上电后io状态
	in R24,0x16
	andi R24,127
	sts _pb_state,R24
	.dbline 290
; 	if(pb_state!=0x7f)  //第一次检测io
	cpi R24,127
	breq L4
	.dbline 291
; 	{
	.dbline 293
; 	
; 	   for(i=0;i<6;i++)
	clr R20
	xjmp L9
L6:
	.dbline 294
; 	   {
	.dbline 295
; 	     if((pb_state&(1<<i))==0)
	ldi R16,1
	mov R17,R20
	xcall lsl8
	lds R2,_pb_state
	and R2,R16
	brne L10
	.dbline 296
; 		 {
	.dbline 297
; 		   i2c_public|=1<<i;  //相应位置位
	ldi R16,1
	mov R17,R20
	xcall lsl8
	lds R2,_i2c_public
	or R2,R16
	sts _i2c_public,R2
	.dbline 298
; 		 }  
L10:
	.dbline 299
L7:
	.dbline 293
	inc R20
L9:
	.dbline 293
	cpi R20,6
	brlo L6
	.dbline 300
; 	   }
; 	  if((pb_state&(1<<6))==0)
	lds R2,_pb_state
	sbrc R2,6
	rjmp L12
	.dbline 301
; 	   {
	.dbline 302
; 	     i2c_public|=1<<5;
	lds R24,_i2c_public
	ori R24,32
	sts _i2c_public,R24
	.dbline 303
; 	   }
L12:
	.dbline 304
L4:
	.dbline -2
L3:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e io_check _io_check fV
;              i -> R20
	.even
_io_check::
	xcall push_gset1
	.dbline -1
	.dbline 308
; 	}
; 	//UDR=pb_state;
; }
; void io_check(void)     //io状态变化检测函数 0.5s检测一次
; {
	.dbline 311
;  uchar i;
; 
; 	if(pb_state!=(PINB&0x7f))
	in R24,0x16
	andi R24,127
	lds R2,_pb_state
	cp R2,R24
	breq L15
	.dbline 312
; 	{
	.dbline 313
; 	  pbcheck_num++;
	lds R24,_pbcheck_num
	subi R24,255    ; addi 1
	sts _pbcheck_num,R24
	.dbline 314
; 	}
L15:
	.dbline 316
; 	
; 	if(pbcheck_num>1)  //确认有变化
	ldi R24,1
	lds R2,_pbcheck_num
	cp R24,R2
	brlo X0
	xjmp L17
X0:
	.dbline 317
; 	{
	.dbline 318
; 	   for(i=0;i<6;i++)
	clr R20
	xjmp L22
L19:
	.dbline 319
; 	   {
	.dbline 320
; 	        if((pb_state&(1<<i))!=((PINB&(1<<i))))//位比较,相同则调用函数
	mov R18,R20
	clr R19
	ldi R16,1
	ldi R17,0
	xcall lsl16
	in R2,0x16
	clr R3
	and R2,R16
	and R3,R17
	lds R4,_pb_state
	clr R5
	and R4,R16
	and R5,R17
	cp R4,R2
	cpc R5,R3
	breq L23
	.dbline 321
; 	        {
	.dbline 323
; 			   
; 			   i2c_public|=(1<<i);   //相应位置位
	ldi R16,1
	mov R17,R20
	xcall lsl8
	lds R2,_i2c_public
	or R2,R16
	sts _i2c_public,R2
	.dbline 324
; 			   pb_state=PINB&0x7f; //保存新的状态位
	in R24,0x16
	andi R24,127
	sts _pb_state,R24
	.dbline 325
; 			   STATE=(~pb_state)&0x7f;
	com R24
	andi R24,127
	sts _STATE,R24
	.dbline 326
; 	        }
L23:
	.dbline 327
L20:
	.dbline 318
	inc R20
L22:
	.dbline 318
	cpi R20,6
	brlo L19
	.dbline 328
; 		}	
; 	   if((pb_state&(1<<6))!=(PINB&(1<<6)))  //由于i2c_public只有8位第7位单独处理
	in R24,0x16
	andi R24,64
	lds R25,_pb_state
	andi R25,64
	cp R25,R24
	breq L25
	.dbline 329
; 	   {                                   //第5位第6位用相同申请项
	.dbline 330
; 			   i2c_public|=(1<<5);   //相应位置位
	lds R24,_i2c_public
	ori R24,32
	sts _i2c_public,R24
	.dbline 331
; 			   pb_state=PINB&0x7f; //保存新的状态位
	in R24,0x16
	andi R24,127
	sts _pb_state,R24
	.dbline 332
; 			   STATE=(~pb_state)&0x7f; //
	com R24
	andi R24,127
	sts _STATE,R24
	.dbline 333
; 	   }
L25:
	.dbline 334
	clr R2
	sts _pbcheck_num,R2
	.dbline 335
L17:
	.dbline -2
L14:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e open_machine _open_machine fV
	.even
_open_machine::
	.dbline -1
	.dbline 344
; 	  pbcheck_num=0; 
; 	}
; 	//UDR=pb_state;
; }
; /*********************************************
; //开机函数
; //此函数用于设置开机时序
; 
; *********************************************/
; void open_machine(void)
; {
	.dbline 345
;    WDR();
	wdr
	.dbline 347
;    //PORTC|=0x38;                               //pwrbt=1,reset=1,eset_l=1
;    pwrbt_count=0;
	clr R2
	sts _pwrbt_count,R2
	.dbline 348
;    reset_open_count=0;
	sts _reset_open_count,R2
	.dbline 349
;    vs_on_open_count=0;
	sts _vs_on_open_count,R2
	.dbline 350
;    machine_open_start=1;
	ldi R24,1
	sts _machine_open_start,R24
	.dbline 351
;    open_to_close_station=0;
	sts _open_to_close_station,R2
	.dbline 352
;    open_to_close_count=0;
	clr R3
	sts _open_to_close_count+1,R3
	sts _open_to_close_count,R2
	.dbline 353
;    close_machine_enable=0;
	sts _close_machine_enable,R2
	.dbline 354
;    open_machine_enable=0;
	sts _open_machine_enable,R2
	.dbline 355
;    tv_state=1;
	sts _tv_state,R24
	.dbline 356
;    WDR();
	wdr
	.dbline 357
;    command_2d=0;
	sts _command_2d,R2
	.dbline 358

⌨️ 快捷键说明

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