📄 zhulast.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 + -