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

📄 zhulast.lst

📁 基于PIC单片机
💻 LST
字号:
__text_start:
__start:
    01B7 EFCF      LDI	R28,0xFF
    01B8 E1D0      LDI	R29,0x10
    01B9 BFCD      OUT	0x3D,R28
    01BA BFDE      OUT	0x3E,R29
    01BB 53C0      SUBI	R28,0x30
    01BC 40D0      SBCI	R29,0
    01BD EA0A      LDI	R16,0xAA
    01BE 8308      STD	Y+0,R16
    01BF 2400      CLR	R0
    01C0 E4E6      LDI	R30,0x46
    01C1 E0F1      LDI	R31,1
    01C2 E018      LDI	R17,0x8
    01C3 3DEC      CPI	R30,0xDC
    01C4 07F1      CPC	R31,R17
    01C5 F011      BEQ	0x01C8
    01C6 9201      ST	R0,Z+
    01C7 CFFB      RJMP	0x01C3
    01C8 8300      STD	Z+0,R16
    01C9 E2E8      LDI	R30,0x28
    01CA E0F3      LDI	R31,3
    01CB E0A0      LDI	R26,0
    01CC E0B1      LDI	R27,1
    01CD E013      LDI	R17,3
    01CE 36EE      CPI	R30,0x6E
    01CF 07F1      CPC	R31,R17
    01D0 F021      BEQ	0x01D5
    01D1 95C8      LPM
    01D2 9631      ADIW	R30,1
    01D3 920D      ST	R0,X+
    01D4 CFF9      RJMP	0x01CE
    01D5 940E0840  CALL	_main
_exit:
    01D7 CFFF      RJMP	_exit
FILE: F:\AVR\zhulast\main.c
(0001) //ICC-AVR application builder : 2006-11-29 10:30:50
(0002) // Target : M128
(0003) // Crystal: 11.0592.0000Mhz
(0004) /******************************main file*********************************/		   
(0005) #include "allhead.h"   
(0006) extern uchar biaozhi;              //触摸屏接收中断用
(0007) extern uchar RXC_BUFF[15];         //触摸屏发送的数据
(0008) extern uchar key;      			   //键值
(0009) extern uchar jiemian;   		   //界面标志
(0010) extern uchar time[22]; 			   //初始时间设置 (未处理)
(0011) extern uchar gas_type;  		   //气体类型
(0012) extern uchar unit_chroma; 		   //浓度单位
(0013) extern uchar denglu ;   		   // 登录界面标志
(0014) extern uchar pass[6];       	   //存放E2中读出的密码
(0015) //TWI 相关全局变量
(0016) extern uchar i2c_rd_buff[32];      //i2c读出的数最初存放的地方
(0017) extern uchar i2c_wt_buff[35];      //写
(0018) extern uchar fhz; 
(0019) extern uchar flag_can;
(0020) //开关机记录显示用
(0021) extern uint addre2;                //外部E2的当前地址
(0022) extern uchar addre2hi;             //地址高址
(0023) extern uchar addre2lo;             //地址低址
(0024) extern uchar m;
(0025) 
(0026) extern uint realaddr;              //外部RAM中存放实时界面信息地址
(0027) uint realaddr2=0x3000;     		   //存RAM错误信息用
(0028) uchar cn2=0;
(0029) 
(0030) uchar first_alarm=0;
(0031) uchar shoubao[9];                  //首报 		   
(0032) uchar kk1=0; 	  				   //等待接收32帧数用
(0033) uchar yong=0;   				   //判断CAN出错标志
(0034) //uchar yy1=0;
(0035) //故障,报警显示用实时地址
(0036) uint guzhangaddr=0x6800;  		   //故障地址 0x6800-0x7bff
(0037) uint baojingaddr=0x0400;  		   //报警地址 0x0400-0x67ff
(0038) //存储用
(0039) uint guzhangaddr2=0x6800;  		   //故障地址 0x6800-0x7bff
(0040) uint baojingaddr2=0x0400;  		   //报警地址 0x0400-0x5b7f
(0041) 
(0042) uint onaddr2=0;    //开关机用,
(0043) uchar jj=0;        //判断第一次开机用 取外部E2故障,报警地址必须在存了开机记录之后!
(0044) volatile uchar keyc=0;
(0045) 
(0046) uchar firstuse1=0;    			   //判断电源故障是不是第一次进入用
(0047) uchar firstuse2=0;  
(0048) uchar firstuse3=0;
(0049) uchar firstuse4=0;   			   //亏电
(0050) uchar hibao[32][4];     		   //高报
(0051) uchar lobao[32][4];     		   //低报
(0052) uchar detector[32][4];       	   //传感器
(0053) uchar communicate[32][4];		   //通讯 
(0054) uchar xuanbit[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
(0055) uchar cannum=0;
(0056) 
(0057) uint cuo1=0;                       //记录当前故障总数用    
(0058) uint cuo2=0;     				   //记录当前报警总数用
(0059) uint cuo3=0;     				   // 实时界面用 实时报警,故障数
(0060) uint cuo4=0;     				   //实时界面用,基数
(0061) uchar wunai=0;   				   //自动搜索后第一次轮埙的数不要
(0062) uchar wunai2=0;  				   //节点投用
(0063) uchar idnum;
(0064) uchar can_cuo_flag[32];                  //转换器故障 用
(0065) uchar yure_flag=1;                      //预热标志
(0066) struct 
(0067) {
(0068)     uchar bei;   				   //备电
(0069) 	uchar shi;   				   //市电
(0070) 	uchar cong;  				   //从电
(0071) }error;	
(0072) struct 
(0073) {    
(0074)     uchar di[32][4];   			   //低报
(0075) 	uchar tan[32][4];  			   //探测器
(0076) 	uchar tong[32][4]; 			   //通讯
(0077) 	uchar gao[32][4];              //高报 
(0078) }rxerror;	
(0079) //CAN相关全局变量
(0080) uchar canuse[4]={0xff,0xff,0xff,0xff};    //转换器的投用情况 按位
(0081) uchar detuse[33][4];         //所有485节点的投用情况,0,1按位起作用
(0082) uchar det_link[33]  ;        //探测器或联动模块选择字节段,按位起作用 
(0083) uchar trans_complete=0;      //一个转换器下所有数据上传结束标志   //去掉了volatile
(0084) uchar rx_buff[13];                  //接收转换器上传的数据
(0085) uchar zhongbuff[33][10];            // 一次接收的转换器的数 zhongbuff[33][n]接收错误总数
(0086) //时间设置相关变量
(0087) uchar time_set[7];       //存已处理的设置时间,日期
(0088) uchar realtimebuff[7];   //存中断INT6中读取的实时时间
(0089) uchar minute=0;          //分钟,实时关机记录函数用
(0090) uchar minute2=0;
(0091) uchar minute3=0;
(0092) uchar second=0;          //秒
(0093) //GAL门相关全局变量
(0094) uchar gal1data=0x00 ;
(0095) uchar gal2data=0x7f ;           //继电器控制信号1,联动模块故障1,联动输出都为1
(0096) uchar gal3data=0x77 ;  			//指示灯为共阳极的
(0097) uchar gal4data=0x6a ;  			//默认正常
(0098) uchar gal5data=0xff ;
(0099) /****************端口的初始化**未用的引脚使用内部上拉*************/
(0100) void port_init(void) 
(0101) {
(0102)     PORTA = 0x00;
_port_init:
    01D8 2422      CLR	R2
    01D9 BA2B      OUT	0x1B,R2
(0103)     DDRA  = 0x00;
    01DA BA2A      OUT	0x1A,R2
(0104)     PORTB = 0xe1;    //PB0MCP2510片选信号0xe1
    01DB EE81      LDI	R24,0xE1
    01DC BB88      OUT	0x18,R24
(0105)     DDRB  = 0x17;    //CAN相关的控制信号0x17
    01DD E187      LDI	R24,0x17
    01DE BB87      OUT	0x17,R24
(0106)     PORTC = 0x00;    //m103 output only
    01DF BA25      OUT	0x15,R2
(0107)     DDRC  = 0x00;    //C口作为外部寻址地址的高八位
    01E0 BA24      OUT	0x14,R2
(0108)     PORTD = 0x50;    //20
    01E1 E580      LDI	R24,0x50
    01E2 BB82      OUT	0x12,R24
(0109)     DDRD  = 0x00;    //打印机BUSY PD7,消音键输入PD6,液晶忙 PD5输入
    01E3 BA21      OUT	0x11,R2
(0110)     PORTE = 0x84;    
    01E4 E884      LDI	R24,0x84
    01E5 B983      OUT	0x03,R24
(0111)     DDRE  = 0x3C;
    01E6 E38C      LDI	R24,0x3C
    01E7 B982      OUT	0x02,R24
(0112)     PORTF = 0x00;
    01E8 92200062  STS	0x62,R2
(0113)     DDRF  = 0x00;   //PF0-PF3输入输出通道关联用
    01EA 92200061  STS	0x61,R2
(0114)     PORTG = 0x00;   //控制看门狗中断的引脚PG4未开启呢
    01EC 92200065  STS	0x65,R2
(0115)     DDRG  = 0x00;   //00是没有加入看门 狗0x10加入
    01EE 92200064  STS	0x64,R2
(0116)     DDRG  = 0x10; 
    01F0 E180      LDI	R24,0x10
    01F1 93800064  STS	0x64,R24
    01F3 9508      RET
(0117) }
(0118) //UART1 initialize, desired baud rate: 19200
(0119) // actual: baud rate:19200 (0.2%)
(0120) // char size: 8 bit    parity: Disabled
(0121) void uart1_init(void) 
(0122) {
(0123)     UCSR1B = 0x00;          //disable while setting baud rate
_uart1_init:
    01F4 2422      CLR	R2
    01F5 9220009A  STS	0x9A,R2
(0124)     UCSR1A = 0x00;
    01F7 9220009B  STS	0x9B,R2
(0125)     UCSR1C =(1<<UCSZ11)|(1<<UCSZ10);
    01F9 E086      LDI	R24,6
    01FA 9380009D  STS	0x9D,R24
(0126)     UBRR1L=35;//25;//(fosc/16/(baud-1))%256;
    01FC E283      LDI	R24,0x23
    01FD 93800099  STS	0x99,R24
(0127)     UBRR1H=0;//(fosc/16/(baud-1))/256;
    01FF 92200098  STS	0x98,R2
(0128)     UCSR1B =(1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1);
    0201 E988      LDI	R24,0x98
    0202 9380009A  STS	0x9A,R24
    0204 9508      RET
(0129) }
(0130) // desired baud rate:4800 ,9 bit
(0131) void uart0_init(void)
(0132) {
(0133)     UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
    0205 2422      CLR	R2
    0206 B82A      OUT	0x0A,R2
(0134)     UCSR0A = 0x00;
    0207 B82B      OUT	0x0B,R2
(0135)     UCSR0C = 0x06;
    0208 E086      LDI	R24,6
    0209 93800095  STS	0x95,R24
(0136)     UBRR0L  = 0x8F; //set baud rate lo
    020B E88F      LDI	R24,0x8F
    020C B989      OUT	0x09,R24
(0137)     UBRR0H = 0x00; //set baud rate hi
    020D 92200090  STS	0x90,R2
(0138)     UCSR0B = 0x1c;
    020F E18C      LDI	R24,0x1C
    0210 B98A      OUT	0x0A,R24
    0211 9508      RET
(0139) }
(0140) //SPI initialize
(0141) void spi_init(void)
(0142) {
(0143)     SPCR = 0x50; //setup SPI
_spi_init:
    0212 E580      LDI	R24,0x50
    0213 B98D      OUT	0x0D,R24
(0144)     SPSR = 0x00; //setup SPI
    0214 2422      CLR	R2
    0215 B82E      OUT	0x0E,R2
    0216 9508      RET
(0145) }
(0146) //TIMER1 initialize - prescale:Stop
(0147) // WGM: 0) Normal, TOP=0xFFFF
(0148) // desired value: 1Hz// actual value: Out of range
(0149) void timer1_init(void)
(0150) {
(0151)     TCCR1B = 0x00; //stop
_timer1_init:
    0217 2422      CLR	R2
    0218 BC2E      OUT	0x2E,R2
(0152)     TCNT1H = 0xFF /*INVALID SETTING*/; //setup
    0219 EF8F      LDI	R24,0xFF
    021A BD8D      OUT	0x2D,R24
(0153)     TCNT1L = 0xFE /*INVALID SETTING*/;
    021B EF8E      LDI	R24,0xFE
    021C BD8C      OUT	0x2C,R24
(0154)     OCR1AH = 0x00 /*INVALID SETTING*/;
    021D BC2B      OUT	0x2B,R2
(0155)     OCR1AL = 0x00 /*INVALID SETTING*/;
    021E BC2A      OUT	0x2A,R2
(0156)     OCR1BH = 0x00 /*INVALID SETTING*/;
    021F BC29      OUT	0x29,R2
(0157)     OCR1BL = 0x00 /*INVALID SETTING*/;
    0220 BC28      OUT	0x28,R2
(0158)     OCR1CH = 0x00 /*INVALID SETTING*/;
    0221 92200079  STS	0x79,R2
(0159)     OCR1CL = 0x00 /*INVALID SETTING*/;
    0223 92200078  STS	0x78,R2
(0160)     ICR1H  = 0x00 /*INVALID SETTING*/;
    0225 BC27      OUT	0x27,R2
(0161)     ICR1L  = 0x00 /*INVALID SETTING*/;
    0226 BC26      OUT	0x26,R2
(0162)     TCCR1A = 0x00;
    0227 BC2F      OUT	0x2F,R2
(0163)     TCCR1B = 0x06; //start Timer
    0228 E086      LDI	R24,6
    0229 BD8E      OUT	0x2E,R24
    022A 9508      RET
(0164) }
(0165) //MCP2510初始化
(0166) void init_can(void)
(0167) { 
(0168)     write_MCP (CANCTRL, 0x80);  //0x80, 配置模式
_init_can:
    022B E820      LDI	R18,0x80
    022C E00F      LDI	R16,0xF
    022D 940E223F  CALL	_write_MCP
(0169) 	/*
(0170)     //每发一贞转换器要延时2ms
(0171) 	write_MCP (CNF1, 0x03);		//	Set CAN-Baudrate  125 kBaud
(0172) 	 //同步跳转宽度SJW=1*TQ、
(0173)     write_MCP (CNF2, 0x90);		//	8MHz
(0174) 	 //

⌨️ 快捷键说明

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