📄 bjqd.lst
字号:
04EB 940E08FF CALL _serial_init
(0654) adc_init();
04ED DD8A RCALL _adc_init
(0655) int0_init();
04EE DD56 RCALL _int0_init
(0656) cal_timer1(speed);
04EF 91000081 LDS R16,speed
04F1 91100082 LDS R17,speed+1
04F3 DE77 RCALL _cal_timer1
(0657) GIFR=0;
04F4 2422 CLR R2
04F5 BE2A OUT 0x3A,R2
(0658) TIFR=0;
04F6 BE28 OUT 0x38,R2
(0659) SEI();
04F7 9478 BSET 7
(0660) delay_ms(50);
04F8 E302 LDI R16,0x32
04F9 E010 LDI R17,0
04FA 940E0563 CALL _delay_ms
(0661) i_disen();
04FC DE2A RCALL _i_disen
(0662) job_att(0);
04FD 2700 CLR R16
04FE 940E0880 CALL _job_att
(0663) //临时
(0664) state2|=0b00000010;//进入计算机控制状态
0500 918000F5 LDS R24,state2
0502 6082 ORI R24,2
0503 938000F5 STS state2,R24
0505 C05B RJMP 0x0561
(0665) while(1) //按键循环处理
(0666) {
(0667) job_att(1); //485
0506 E001 LDI R16,1
0507 940E0880 CALL _job_att
(0668) in_out_number=out_pull;
0509 E082 LDI R24,2
050A 93800064 STS in_out_number,R24
(0669) switch (in_out_number)
050C 2F48 MOV R20,R24
050D 2755 CLR R21
050E 3042 CPI R20,2
050F E0E0 LDI R30,0
0510 075E CPC R21,R30
0511 F081 BEQ 0x0522
0512 3043 CPI R20,3
0513 E0E0 LDI R30,0
0514 075E CPC R21,R30
0515 F009 BEQ 0x0517
0516 C047 RJMP 0x055E
(0670) {
(0671) case out_v : //外控电压
(0672) if (in_out_state!=out_v)
0517 91800065 LDS R24,in_out_state
0519 3083 CPI R24,3
051A F029 BEQ 0x0520
(0673) {
(0674) in_out_state=out_v;
051B E083 LDI R24,3
051C 93800065 STS in_out_state,R24
(0675) out_ctrol();
051E DEC0 RCALL _out_ctrol
(0676) pull_stop();
051F DD3D RCALL _pull_stop
(0677) }
(0678) adc_ctrol();
0520 DECA RCALL _adc_ctrol
(0679) break;
0521 C03C RJMP 0x055E
(0680) case out_pull:
(0681) if (in_out_state!=out_pull)
0522 91800065 LDS R24,in_out_state
0524 3082 CPI R24,2
0525 F029 BEQ 0x052B
(0682) {
(0683) in_out_state=out_pull;
0526 E082 LDI R24,2
0527 93800065 STS in_out_state,R24
(0684) timer2_init();
0529 DD16 RCALL _timer2_init
(0685) pull_start();
052A DD21 RCALL _pull_start
(0686) }
(0687) if (speed_pull>2400)
052B E680 LDI R24,0x60
052C E099 LDI R25,0x9
052D 90200060 LDS R2,speed_pull
052F 90300061 LDS R3,speed_pull+1
0531 1582 CP R24,R2
0532 0593 CPC R25,R3
0533 F420 BCC 0x0538
(0688) {speed_pull=2400;}
0534 93900061 STS speed_pull+1,R25
0536 93800060 STS speed_pull,R24
(0689) if(speed_pull<=4)
0538 E084 LDI R24,4
0539 E090 LDI R25,0
053A 90200060 LDS R2,speed_pull
053C 90300061 LDS R3,speed_pull+1
053E 1582 CP R24,R2
053F 0593 CPC R25,R3
0540 F020 BCS 0x0545
(0690) {speed_pull=4;}
0541 93900061 STS speed_pull+1,R25
0543 93800060 STS speed_pull,R24
(0691) //cal_timer1();
(0692) speed_slow(speed,speed_pull/4);
0545 91200060 LDS R18,speed_pull
0547 91300061 LDS R19,speed_pull+1
0549 9536 LSR R19
054A 9527 ROR R18
054B 9536 LSR R19
054C 9527 ROR R18
054D 91000081 LDS R16,speed
054F 91100082 LDS R17,speed+1
0551 DE00 RCALL _speed_slow
(0693) speed=speed_pull/4;
0552 90200060 LDS R2,speed_pull
0554 90300061 LDS R3,speed_pull+1
0556 9436 LSR R3
0557 9427 ROR R2
0558 9436 LSR R3
0559 9427 ROR R2
055A 92300082 STS speed+1,R3
055C 92200081 STS speed,R2
(0694) default :
(0695) break;
(0696) }
(0697) out_key();
055E 940E0929 CALL _out_key
(0698) key_disposal();
0560 DEAA RCALL _key_disposal
0561 CFA4 RJMP 0x0506
0562 9508 RET
_delay_ms:
j --> R20
time --> R16
0563 940E0A2B CALL push_gset1
FILE: C:\BJQD\delay.c
(0001)
(0002) /****************************************************
(0003) 毫秒延时函数,对应晶振频率为8MHZ
(0004) *****************************************************/
(0005) void delay_ms(unsigned int time)
(0006) {
(0007) unsigned int j;
(0008) do
(0009) {
(0010) time--;
0565 5001 SUBI R16,1
0566 4010 SBCI R17,0
(0011) for (j=1;j<=200;j++);
0567 E041 LDI R20,1
0568 E050 LDI R21,0
0569 C002 RJMP 0x056C
056A 5F4F SUBI R20,0xFF
056B 4F5F SBCI R21,0xFF
056C EC88 LDI R24,0xC8
056D E090 LDI R25,0
056E 1784 CP R24,R20
056F 0795 CPC R25,R21
0570 F7C8 BCC 0x056A
(0012) }
(0013) while (time>1);
0571 E081 LDI R24,1
0572 E090 LDI R25,0
0573 1780 CP R24,R16
0574 0791 CPC R25,R17
0575 F378 BCS 0x0565
0576 940E0A2E CALL pop_gset1
0578 9508 RET
(0014) }
(0015)
(0016) /***************************************
(0017) 微秒延时程序,对应晶振频率为8MHZ
(0018) ***************************************/
(0019) void delay_us(unsigned int time)
(0020) {
(0021) unsigned int j;
(0022) do
(0023) {
(0024) time--;
_delay_us:
j --> Y+1
time --> R16
0579 5001 SUBI R16,1
057A 4010 SBCI R17,0
(0025) }
(0026) while (time>0);
057B 3000 CPI R16,0
057C 0701 CPC R16,R17
057D F7D9 BNE 0x0579
057E 9508 RET
_serialti_int:
i --> Y+1
057F 922A ST R2,-Y
0580 923A ST R3,-Y
0581 938A ST R24,-Y
0582 939A ST R25,-Y
0583 93EA ST R30,-Y
0584 93FA ST R31,-Y
0585 B62F IN R2,0x3F
0586 922A ST R2,-Y
FILE: C:\BJQD\comm.c
(0001) /*******************************************************
(0002) /*ICC-AVR application builder : 2004-3-11 12:02:11
(0003) // Target : atMega16
(0004) // Crystal: 8.0000Mhz
(0005) 通讯模块 单工双向485接口
(0006) ******************************************************/
(0007) #include <string.h>
(0008) #include <iom16v.h>
(0009) #include <math.h>
(0010) #include <stdlib.h>
(0011) #include <macros.h>
(0012) #include <eeprom.h>
(0013) #include "eeprom_l.h"
(0014) #include "comm.h"
(0015) #include "main.h"
(0016) #include "delay.h"
(0017) #include "key.h"
(0018)
(0019) #pragma data:data
(0020) unsigned char state2;
(0021) //state2.0 disable_data //1:输入数据无效,0有效;
(0022) //state2.1 remote //1:遥控输入有效,0:本地输入有效
(0023) //state2.7 p99 //P99指令使能
(0024) unsigned char state1;
(0025) //state1.2 PE
(0026) //state1.3 DOR
(0027) //state1.4 FE
(0028) //state1.5
(0029) //state1.6
(0030) unsigned char pump_tab; //机器号
(0031) extern unsigned int speed;
(0032) extern unsigned char state_other;
(0033) extern unsigned char state0;
(0034) extern unsigned char key;
(0035) extern unsigned char in_out_number;
(0036) extern unsigned char state;
(0037) //state0.5接收消息有效标志
(0038)
(0039) /* 通信变量定义 */
(0040) char txd_frm[15]; //物理层发送缓冲区
(0041) char txd_frm_len; //物理层发送数据长度
(0042) char rxd_frm[15]; //物理层接收缓冲区
(0043) char rxd_frm_len; //物理层接收数据长度
(0044) char tx485_busy; //485发送工作判忙
(0045) char txd_cnt; //发送数据计数器
(0046) char rxd_cnt; //接收数据计数器
(0047) char rxd_ins_flag; //一帧接收数据中有E8或E9标志
(0048) char txd_ins_flag; //一帧发送数据中有E8或E9标志
(0049) char txd_ins_data; //发送数据
(0050) char rxd_data; //接收数据
(0051) char mac_txd_th; //发送状态 0发送完毕,1发送帧头,2发送中间数据
(0052) char rxd_h_ok; //接收开始标志
(0053) char fcs1; //异或校验
(0054) char rxd_mesg_addr; //接收地址
(0055) char rxd_mesg_len; //应用层接收数据长度
(0056) char rxd_mesg[15]; //应用层接收数据缓冲区
(0057) char txd_mesg_addr; //发送地址
(0058) char txd_mesg_len; //应用层发送数据长度
(0059) char txd_mesg[15]; //应用层发送数据缓冲区
(0060) /*********任务管理*************/
(0061) char pri[16];
(0062) char act[16]; //任务寄存器
(0063) char rxd_llc_job; //物理层收任务寄存器
(0064) char txd_llc_job; //物理层发任务寄存器
(0065) char rs485_app_job; //应用层任务寄存器
(0066) char att_n_max;
(0067) extern struct cal
(0068) {
(0069) unsigned int test_time;
(0070) unsigned long int dispvol;
(0071) unsigned long int test_dispvol;
(0072) float dispk;
(0073) unsigned long int run_time;
(0074) };
(0075) extern struct cal cal0;
(0076) /*****************************************************************
(0077) 功能: serial_int
(0078) 描述: 运行串行口 FSAs.
(0079) 参数: 无.
(0080) 返回无.
(0081) 影响无.
(0082) *****************************************************************/
(0083) #pragma interrupt_handler serialri_int:iv_USART_RX
(0084) #pragma interrupt_handler serialti_int:iv_USART_TX
(0085)
(0086) /* 通信物理层发送中断程序模块 */
(0087) void serialti_int(void)
(0088) {
(0089) char i;
(0090) UCSRA=RS485_UCSRA|0b01000000; /*清发送完中断标志位*/
0587 E480 LDI R24,0x40
0588 B98B OUT 0x0B,R24
(0091) if(mac_txd_th==1)
0589 918000CB LDS R24,mac_txd_th
058B 3081 CPI R24,1
058C F471 BNE 0x059B
(0092) { UDR=0xe9;
058D EE89 LDI R24,0xE9
058E B98C OUT 0x0C,R24
(0093) txd_cnt=0;
058F 2422 CLR R2
0590 922000D1 STS txd_cnt,R2
(0094) txd_ins_flag=0;
0592 922000CE STS txd_ins_flag,R2
(0095) tx485_busy=1;
0594 E081 LDI R24,1
0595 938000D2 STS tx485_busy,R24
(0096) mac_txd_th=2;
0597 E082 LDI R24,2
0598 938000CB STS mac_txd_th,R24
(0097) }
059A C051 RJMP 0x05EC
(0098) else
(0099) { if(mac_txd_th==2)
059B 918000CB LDS R24,mac_txd_th
059D 3082 CPI R24,2
059E F009 BEQ 0x05A0
059F C046 RJMP 0x05E6
(0100) { if(txd_ins_flag==1)
05A0 918000CE LDS R24,txd_ins_flag
05A2 3081 CPI R24,1
05A3 F439 BNE 0x05AB
(0101) { txd_ins_flag=0;
05A4 2422 CLR R2
05A5 922000CE STS txd_ins_flag,R2
(0102) UDR=txd_ins_data;
05A7 902000CD LDS R2,txd_ins_data
05A9 B82C OUT 0x0C,R2
(0103) }
05AA C041 RJMP 0x05EC
(0104) else
(0105) { if(txd_cnt<=(txd_frm_len-1))
05AB 918000E3 LDS R24,txd_frm_len
05AD 5081 SUBI R24,1
05AE 902000D1 LDS R2,txd_cnt
05B0 1582 CP R24,R2
05B1 F168 BCS 0x05DF
(0106) { if(txd_frm[txd_cnt]==0xe8||txd_frm[txd_cnt]==0xe9)
05B2 EE84 LDI R24,0xE4
05B3 E090 LDI R25,0
05B4 2DE2 MOV R30,R2
05B5 27FF CLR R31
05B6 0FE8 ADD R30,R24
05B7 1FF9 ADC R31,R25
05B8 8020 LDD R2,Z+0
05B9 2433 CLR R3
05BA 2D82 MOV R24,R2
05BB 3E88 CPI R24,0xE8
05BC F011 BEQ 0x05BF
05BD 3E89 CPI R24,0xE9
05BE F489 BNE 0x05D0
(0107) { txd_ins_flag=1;
05BF E081 LDI R24,1
05C0 938000CE STS txd_ins_flag,R24
(0108) txd_ins_data=txd_frm[txd_cnt]-0xe8;
05C2 EE84 LDI R24,0xE4
05C3 E090 LDI R25,0
05C4 91E000D1 LDS R30,txd_cnt
05C6 27FF CLR R31
05C7 0FE8 ADD R30,R24
05C8 1FF9 ADC R31,R25
05C9 8180 LDD R24,Z+0
05CA 5E88 SUBI R24,0xE8
05CB 938000CD STS txd_ins_data,R24
(0109) UDR=0xe8;
05CD EE88 LDI R24,0xE8
05CE B98C OUT 0x0C,R24
(0110) }
05CF C009 RJMP 0x05D9
(0111) else
(0112) { UDR=txd_frm[txd_cnt];}
05D0 EE84 LDI R24,0xE4
05D1 E090 LDI R25,0
05D2 91E000D1 LDS R30,txd_cnt
05D4 27FF CLR R31
05D5 0FE8 ADD R30,R24
05D6 1FF9 ADC R31,R25
05D7 8020 LDD R2,Z+0
05D8 B82C OUT 0x0C,R2
(0113) txd_cnt=txd_cnt+1;
05D9 918000D1 LDS R24,txd_cnt
05DB 5F8F SUBI R24,0xFF
05DC 938000D1 STS txd_cnt,R24
(0114) }
05DE C00D RJMP 0x05EC
(0115) else
(0116) { tx485_busy=0;
05DF 2422 CLR R2
05E0 922000D2 STS tx485_busy,R2
(0117) mac_txd_th=0;
05E2 922000CB STS mac_txd_th,R2
(0118) PORTC&=~(1<<DE_485);
05E4 98A8 CBI 0x15,0
(0119) }
(0120) }
(0121) }
05E5 C006 RJMP 0x05EC
(0122) else
(0123) { tx485_busy=0;
05E6 2422 CLR R2
05E7 922000D2 STS tx485_busy,R2
(0124) mac_txd_th=0;
05E9 922000CB STS mac_txd_th,R2
(0125) PORTC&=~(1<<DE_485);
05EB 98A8 CBI 0x15,0
(0126) }
(0127) }
05EC 9029 LD R2,Y+
05ED BE2F OUT 0x3F,R
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -