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

📄 toucher.s

📁 基于PIC单片机
💻 S
📖 第 1 页 / 共 5 页
字号:
	.module toucher.c
	.area data(ram, con, rel)
_num_open::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile F:\AVR\zhulast\toucher.c
	.dbsym e num_open _num_open c
_ccc::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile F:\AVR\zhulast\toucher.c
	.dbsym e ccc _ccc i
_pass4::
	.blkb 2
	.area idata
	.byte 4,1
	.area data(ram, con, rel)
	.dbfile F:\AVR\zhulast\toucher.c
	.blkb 2
	.area idata
	.byte 8,0
	.area data(ram, con, rel)
	.dbfile F:\AVR\zhulast\toucher.c
	.blkb 2
	.area idata
	.byte 6,9
	.area data(ram, con, rel)
	.dbfile F:\AVR\zhulast\toucher.c
	.dbsym e pass4 _pass4 A[6:6]c
	.area text(rom, con, rel)
	.dbfile F:\AVR\zhulast\toucher.c
	.dbfunc e zhuanhuan1 _zhuanhuan1 fV
	.even
_zhuanhuan1::
	.dbline -1
	.dbline 210
; #include "allhead.h"
; 
; /****************************变量声明********************************/
; extern uchar realtimebuff[7];
; extern uchar time_set[7];
; extern uchar tx_buff[12];              //存放要发向转换器的数
; //TWI 相关全局变量
; extern uchar i2c_rd_buff[32];   //i2c读出的数最初存放的地方
; extern uchar i2c_wt_buff[35];   //写
; extern uchar fhz; 
; 
; extern uchar canuse[4];                    //转换器的投用情况 按位
; extern uchar detuse[33][4];         //所有485节点的投用情况,0,1按位起作用
; extern uchar det_link[33];         //探测器或联动模块选择字节段,按位起作用 
; extern uchar shoubao[9];
; extern uchar firstuse1;  //判断电源故障是不是第一次进入用
; extern uchar firstuse2;  
; extern uchar firstuse3;
; extern uchar firstuse4;   //亏电
; extern uchar hibao[32][4];     //高报
; extern uchar lobao[32][4];     //低报
; extern uchar detector[32][4];       //传感器
; extern uchar communicate[32][4];	 //通讯 
; extern struct 
; {
;     uchar bei;   //备电
; 	uchar shi;   //市电
; 	uchar cong;  //从电
; }error;	
; extern struct 
; {    
;     uchar di[32][4];   //低报
; 	uchar tan[32][4];  //探测器
; 	uchar tong[32][4];  //通讯
; 	uchar gao[32][4];   //高报
; }rxerror;	
; 
; //GAL门相关全局变量
; extern uchar gal1data ;
; extern uchar gal2data ;  //继电器控制信号1,联动模块故障1,联动输出都为1
; extern uchar gal3data ;  //指示灯为共阳极的
; extern uchar gal4data ;
; extern uchar gal5data ;
; 
; extern uint baojingaddr;         
; extern uint guzhangaddr;         //第一次取用的最新故障地址
; extern uint guzhangaddr2;        //已存住的最新故障地址
; extern uint baojingaddr2;   
; extern uint onaddr2 ;        //开关机用     
; extern uchar canuse[4];
; extern uchar detuse[33][4];         //所有485节点的投用情况,0,1按位起作用
; extern uchar zhongbuff[32][10];   // 一次接收的转换器的数
; extern uint cuo1;
; extern uint cuo2;
; extern uint cuo3;                 // 实时界面用 实时报警,故障数
; extern uint cuo4;
; extern uchar keyc;
; extern uchar gal1data;
; extern uchar gal2data;
; extern uchar gal3data;
; extern uchar gal4data;
; //extern uchar first_clarm[11];     //存放首次报警信息
; extern uchar first_alarm;
; extern uchar wunai;
; extern uchar wunai2;    //投用
; extern uchar yure_flag;
; extern uchar errorflag;
; extern uchar can_cuo_flag[32];
; 
; extern uint realaddr2;     //存RAM错误信息用
; 
; uchar flag_local;         // 联动故障用
; 
; //系统坐标
; uchar xh;        //横坐标高字节   
; uchar xl;        //横坐标低字节 
; uchar yh;        //纵坐标高字节 
; uchar yl;        //纵坐标高字节 
; //矩形的右下角坐标      
; uchar x2h;       //横坐标高字节
; uchar x2l;       //横坐标低字节 
; uchar y2h;       //纵坐标高字节 
; uchar y2l;       //纵坐标高字节 
; //common use
; uchar i;         
; uchar j;
; //系统坐标转换后坐标
; uint x;
; uint y;
; 
; uchar biaozhi;  //USART1接收中断数据标志
; uchar key;      //键值
; uchar RXC_BUFF[15];   //触摸屏发送的数据
; uchar jiemian;        //界面标志
; 
; //开关机记录显示用
; uint addre2;                     //外部E2的当前地址
; uchar addre2hi;          //地址高址
; uchar addre2lo;           //地址低址
; 
; uchar num_open=1;            //存放开关机记录中的编号
; uchar num_open2;             //存放翻页后的第一个开关机记录编号
; uchar data[16];              //存放外部E2中的开关机记录中信息
; uchar baojing[16];           //存放外部E2中的报警记录信息 
; uchar guzhang[8];            //存放外部E2中的故障记录信息        
; uint  chroma[16]   ;         //显示的浓度
; uchar c[3];                  //通道关联探测器编号及高低报情况
; 
; uint ccc=0;                  //等待CAN返回计数延时用
; 
; /********************************************************************/
; uchar pass1[6];     //更改密码所存数组
; uchar pass2[6];     //确认密码所存数组
; uchar pass3[6];     //输入密码所存数组
; uchar pass[6];      //存放E2中读出的密码
; uchar pass4[6]={0x04,0x01,0x08,0x00,0x06,0x09};     //设定的超级密码
; uchar time[22];     //存放时间设定后的值
; uchar high[4];      //高报浓度
; uchar low[4];       //低报浓度
; uchar passage1[6];  //探测器高报关联的通道1
; uchar passage2[6];  //探测器低报关联的通道2
; //uchar passage3[4];  //通道3
; //uchar passage4[4];  //通道4
; uchar linkage1[2];  //存放控制外设界面中输入的转换器编号
; uchar linkage2[2];  //存放控制外设界面中输入的探测器编号
; uchar linkage[4];   //存放系统设置界面中输入的调零地址号
; uchar biaoding[4];  //存放系统设置界面中输入的标定值
; uchar old_can[2];   //原来转换器地址
; uchar new_can[2];   //修改后转换器地址
; uchar can[2];       //修改地址界面中can的地址
; uchar old_det[2];   //原来探测器地址
; uchar new_det[2];   //修改后探测器地址
; uchar index_link1;  //指向linkage1数组中的数
; uchar index_link2;  //指向linkage2数组中的数
; uchar index_link;   //指向linkage数组中的数
; uchar bd;           //指向biaoding数组中的数
; //uchar send_buff[8];
; //uchar recv_buff[8];
; uchar p1;           //对应old_can数组
; uchar p2;           //对应new_can数组
; uchar p3;           //对应can数组
; uchar p4;           //对应old_det数组
; uchar p5;           //对应new_det数组
; uchar m1;           //对应pass1数组
; uchar m2;           //对应pass2数组
; uchar m3;           //对应pass3数组
; uchar m;            //对应pass数组
; uchar n;            //对应time数组
; uchar n1;           //对应high数组
; uchar n2;           //对应low数组
; uchar way1;         //通道1标志
; uchar way2;         //通道2标志
; //uchar way3;         //通道3标志
; //uchar way4;         //通道4标志
; uchar page;         //翻页标志
; uchar flag_can;     //can标志
; //uchar flag_sound;   //按键音
; uchar flag_print;   //打印标志
; uchar gas_type;     //气体类型
; uchar unit_chroma;  //浓度单位
; uchar info_det[4];  //存放高低报浓度转换后的值
; uchar chro_bd[2];   //存放标定浓度
; uchar choice;       //选择
; uchar regist;       //注册
; uchar denglu;       //登录
; uchar password;     //判断是超级密码还是普通密码
; uchar num_can;      //can编号
; uchar num_det;      //节点编号
; uchar num_det2;     //已选择的节点的编号
; uchar addr_can;     //控制外设界面中转换器编号
; uchar addr_can1;    //探测器界面中高报关联的转换器编号
; uchar addr_can2;    //探测器界面中低报关联的转换器编号
; uchar addr_can3;    //系统设置界面中调零的转换器编号
; //uchar addr_can3;    //联动界面中通道3关联的转换器编号
; //uchar addr_can4;    //联动界面中通道4关联的转换器编号
; uchar addr_det;     //控制外设界面中探测器编号
; uchar addr_det1;    //探测器界面中高报关联的探测器编号
; uchar link1;        //探测器界面中高报关联的通道编号
; uchar addr_det2;    //探测器界面中低报关联的探测器编号
; uchar link2;        //探测器界面中低报关联的通道编号
; uchar addr_det3;    //系统设置界面调零的探测器编号
; //uchar addr_det3;    //联动界面中通道3关联的探测器编号
; //uchar addr_det4;    //联动界面中通道4关联的探测器编号
; //uchar high_low1;    //联动界面中通道1关联的高低报情况
; //uchar high_low2;    //联动界面中通道2关联的高低报情况
; //uchar high_low3;    //联动界面中通道3关联的高低报情况
; //uchar high_low4;    //联动界面中通道4关联的高低报情况
; uchar channel;      //存放通道的吸合断开情况
; uchar cha_local;    //存放本地通道的吸合断开情况
; uchar state_cha;    
; 
; //光标坐标
; uchar X1H;                  
; uchar X1L;              
; uchar Y1H;
; uchar Y1L; 
; uchar X2H;          
; uchar X2L;
; uchar Y2H;
; uchar Y2L;
; uint X1;                    //光标左上角横坐标
; uint Y1;                    //光标左上角纵坐标
; uint X2;                    //光标右下角横坐标
; uint Y2;                    //光标右下角纵坐标
; 
; 
; /************************转换函数*****************************/
; //对颜色位进行处理的转换
; void zhuanhuan1(void)              
; {
	.dbline 211
;     X1=(X1H&0x03);                   //将X1H,X1L转换成16位数X1,将高6位清零
	lds R24,_X1H
	clr R25
	andi R24,3
	andi R25,0
	sts _X1+1,R25
	sts _X1,R24
	.dbline 212
;   	X1=(X1<<8);     
	movw R2,R24
	mov R3,R2
	clr R2
	sts _X1+1,R3
	sts _X1,R2
	.dbline 213
;   	X1=X1+X1L;
	lds R2,_X1L
	clr R3
	lds R4,_X1
	lds R5,_X1+1
	add R4,R2
	adc R5,R3
	sts _X1+1,R5
	sts _X1,R4
	.dbline 214
;   	X1H=(X1H&0xfc);                 //恢复X1H的高6位,低两位清零
	lds R24,_X1H
	andi R24,252
	sts _X1H,R24
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e zhuanhuan2 _zhuanhuan2 fV
	.even
_zhuanhuan2::
	.dbline -1
	.dbline 217
; }
; void zhuanhuan2(void)
; {
	.dbline 218
;     Y1=Y1H&0x03;                  //将Y1H,Y1L转换成16位数Y1,将高6位清零
	lds R24,_Y1H
	clr R25
	andi R24,3
	andi R25,0
	sts _Y1+1,R25
	sts _Y1,R24
	.dbline 219
;   	Y1=Y1<<8;
	movw R2,R24
	mov R3,R2
	clr R2
	sts _Y1+1,R3
	sts _Y1,R2
	.dbline 220
;   	Y1=Y1+Y1L;
	lds R2,_Y1L
	clr R3
	lds R4,_Y1
	lds R5,_Y1+1
	add R4,R2
	adc R5,R3
	sts _Y1+1,R5
	sts _Y1,R4
	.dbline 221
;   	Y1H=Y1H&0xfc;                 //恢复Y1H的高6位
	lds R24,_Y1H
	andi R24,252
	sts _Y1H,R24
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e zhuanhuan3 _zhuanhuan3 fV
;              x -> R16
	.even
_zhuanhuan3::
	.dbline -1
	.dbline 224
; }
; void zhuanhuan3(void)
; {
	.dbline 225
;     uchar x=0;                      //将16位数X1的高低位分离
	clr R16
	.dbline 226
;     X1L=X1;                       //低8位给X1L
	lds R2,_X1
	lds R3,_X1+1
	sts _X1L,R2
	.dbline 227
;     x=X1>>8;                      
	movw R16,R2
	mov R16,R17
	clr R17
	.dbline 228
;     X1H=X1H|x;                    //高8位处理后给X1H
	lds R2,_X1H
	or R2,R16
	sts _X1H,R2
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbsym r x 16 c
	.dbend
	.dbfunc e zhuanhuan4 _zhuanhuan4 fV
;              y -> R16
	.even
_zhuanhuan4::
	.dbline -1
	.dbline 231
; }
; void zhuanhuan4(void)
; {
	.dbline 232
;     uchar y=0;                      //将16位数Y1的高低位分离
	clr R16
	.dbline 233
;   	Y1L=Y1;                       //将低8位给Y1L
	lds R2,_Y1
	lds R3,_Y1+1
	sts _Y1L,R2
	.dbline 234
;   	y=(Y1>>8);
	movw R16,R2
	mov R16,R17
	clr R17
	.dbline 235
;   	Y1H=(Y1H|y);                    //高8位处理后给Y1H
	lds R2,_Y1H
	or R2,R16
	sts _Y1H,R2
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbsym r y 16 c
	.dbend
	.dbfunc e zhuanhuan _zhuanhuan fV
	.even
_zhuanhuan::
	.dbline -1
	.dbline 240
; }
; 
; //颜色位没有处理的转换
; void zhuanhuan(void)
; {
	.dbline 241
;     x=xh;
	lds R2,_xh
	clr R3
	sts _x+1,R3
	sts _x,R2
	.dbline 242
;     x=x<<8;
	lds R2,_x
	lds R3,_x+1
	mov R3,R2
	clr R2
	sts _x+1,R3
	sts _x,R2
	.dbline 243
;     x=x+xl;                       //将8位数xh,xl转换成16位数x,高位保持不变
	lds R2,_xl
	clr R3
	lds R4,_x
	lds R5,_x+1
	add R4,R2
	adc R5,R3
	sts _x+1,R5
	sts _x,R4
	.dbline 244
;     y=yh;
	lds R2,_yh
	clr R3
	sts _y+1,R3
	sts _y,R2
	.dbline 245
;     y=y<<8;
	lds R2,_y
	lds R3,_y+1
	mov R3,R2
	clr R2
	sts _y+1,R3
	sts _y,R2
	.dbline 246
;     y=y+yl;
	lds R2,_yl
	clr R3
	lds R4,_y
	lds R5,_y+1
	add R4,R2
	adc R5,R3
	sts _y+1,R5
	sts _y,R4
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e zhuanhuan5 _zhuanhuan5 fV
;              x -> R16
	.even
_zhuanhuan5::
	.dbline -1
	.dbline 249
; }
; void zhuanhuan5(void)
; {
	.dbline 250
;     uchar x=0;                      //将16位数X2的高低位分离
	clr R16
	.dbline 251
;   	X2L=X2;                       //低8位给X2L
	lds R2,_X2
	lds R3,_X2+1
	sts _X2L,R2
	.dbline 252
;   	x=X2>>8; 
	movw R16,R2
	mov R16,R17
	clr R17
	.dbline 253
;   	X2H=x;                        //高8位给X2H
	sts _X2H,R16
	.dbline -2
L8:
	.dbline 0 ; func end
	ret
	.dbsym r x 16 c
	.dbend
	.dbfunc e zhuanhuan6 _zhuanhuan6 fV
;              y -> R16
	.even
_zhuanhuan6::
	.dbline -1
	.dbline 256
; }
; void zhuanhuan6(void)
; {
	.dbline 257
;     uchar y=0;                      //将16位数Y2的高低位分离
	clr R16
	.dbline 258
;   	Y2L=Y2;                       //将低8位给Y2L
	lds R2,_Y2
	lds R3,_Y2+1
	sts _Y2L,R2
	.dbline 259
;   	y=Y2>>8;
	movw R16,R2
	mov R16,R17
	clr R17
	.dbline 260
;   	Y2H=y;                        //高8位给Y2H
	sts _Y2H,R16
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbsym r y 16 c
	.dbend
	.dbfunc e zhuanhuan7 _zhuanhuan7 fV
;          temp2 -> R18
;          temp1 -> R16
	.even
_zhuanhuan7::
	.dbline -1
	.dbline 263
; }
; void zhuanhuan7(uchar temp1,uchar temp2)
; {
	.dbline 264
;     x=xh;
	lds R2,_xh
	clr R3
	sts _x+1,R3
	sts _x,R2
	.dbline 265
;     x=x<<8;
	lds R2,_x
	lds R3,_x+1
	mov R3,R2
	clr R2
	sts _x+1,R3
	sts _x,R2
	.dbline 266
;     x=x+xl;
	lds R2,_xl
	clr R3
	lds R4,_x
	lds R5,_x+1
	add R4,R2
	adc R5,R3
	sts _x+1,R5
	sts _x,R4
	.dbline 267
;   	x=x+temp1;                    //报警界面中的位置转换
	mov R2,R16
	clr R3
	add R4,R2
	adc R5,R3
	sts _x+1,R5
	sts _x,R4
	.dbline 268
;   	xl=x;
	movw R2,R4
	sts _xl,R2
	.dbline 269
;   	xh=x>>8;
	mov R2,R3
	clr R3
	sts _xh,R2
	.dbline 270
;   	y=yh;
	lds R2,_yh
	clr R3
	sts _y+1,R3
	sts _y,R2
	.dbline 271
;   	y=y<<8;
	lds R2,_y
	lds R3,_y+1
	mov R3,R2
	clr R2
	sts _y+1,R3
	sts _y,R2
	.dbline 272
;   	y=y+yl;
	lds R2,_yl
	clr R3
	lds R4,_y
	lds R5,_y+1
	add R4,R2
	adc R5,R3
	sts _y+1,R5
	sts _y,R4
	.dbline 273
;   	y=y+temp2;
	mov R2,R18
	clr R3
	add R4,R2
	adc R5,R3
	sts _y+1,R5
	sts _y,R4
	.dbline 274
;   	yl=y;
	movw R2,R4
	sts _yl,R2
	.dbline 275
;   	yh=y>>8;
	mov R2,R3
	clr R3
	sts _yh,R2
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbsym r temp2 18 c
	.dbsym r temp1 16 c
	.dbend
	.dbfunc e zbzj _zbzj fV
	.even
_zbzj::
	.dbline -1
	.dbline 279
; }
; /**************************坐标变化函数*****************************/
; void zbzj(void)                     //液晶坐标增加
; {
	.dbline 280
;     zhuanhuan1();          //8位数X1H,X1L转换为16位,高6位清零
	xcall _zhuanhuan1
	.dbline 281
;   	zhuanhuan2();          //8位数Y1H,Y1L转换为16位,高6位清零
	xcall _zhuanhuan2
	.dbline 282
;   	X1=X1+6;
	lds R24,_X1
	lds R25,_X1+1
	adiw R24,6
	sts _X1+1,R25
	sts _X1,R24
	.dbline 283
;   	X2=X1;               
	movw R2,R24
	sts _X2+1,R3
	sts _X2,R2
	.dbline 284
;   	Y2=Y1+15;
	lds R24,_Y1
	lds R25,_Y1+1
	adiw R24,15
	sts _Y2+1,R25
	sts _Y2,R24
	.dbline 285
;   	zhuanhuan3();         //将16位数X1的高低位分离
	xcall _zhuanhuan3
	.dbline 286
;   	zhuanhuan4();         //将16位数Y1的高低位分离
	xcall _zhuanhuan4
	.dbline 287
;   	zhuanhuan5();         //将16位数X2的高低位分离
	xcall _zhuanhuan5
	.dbline 288
;   	zhuanhuan6();         //将16位数Y2的高低位分离
	xcall _zhuanhuan6
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e zbjs _zbjs fV
	.even
_zbjs::
	.dbline -1
	.dbline 291
; }
; void zbjs(void)                    //液晶坐标减少
;  {
	.dbline 292
;     zhuanhuan1();        //8位数X1H,X1L转换为16位,高6位清零
	xcall _zhuanhuan1
	.dbline 293
;   	zhuanhuan2();        //8位数Y1H,Y1L转换为16位,高6位清零
	xcall _zhuanhuan2
	.dbline 294
;   	X1=X1-6;
	lds R24,_X1
	lds R25,_X1+1
	sbiw R24,6
	sts _X1+1,R25
	sts _X1,R24
	.dbline 295
;   	X2=X1;               
	movw R2,R24
	sts _X2+1,R3
	sts _X2,R2
	.dbline 296
;   	Y2=Y1+15;
	lds R24,_Y1
	lds R25,_Y1+1
	adiw R24,15
	sts _Y2+1,R25

⌨️ 快捷键说明

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