📄 main.lis
字号:
.module main.c
.area data(ram, con, rel)
0000 _receive_addr::
0000 .blkb 2
.area idata
0000 5631 .byte 'V,49
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5631 .byte 'V,49
.area data(ram, con, rel)
0004 .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
0004 .dbsym e receive_addr _receive_addr A[4:4]c
0004 _send_addr::
0004 .blkb 2
.area idata
0004 1365 .byte 19,'e
.area data(ram, con, rel)
0006 .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
0006 .blkb 2
.area idata
0006 1365 .byte 19,'e
.area data(ram, con, rel)
0008 .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
0008 .dbsym e send_addr _send_addr A[4:4]c
0008 _w_ptr::
0008 .blkw 1
.area idata
0008 2A00 .word _ECG_data
.area data(ram, con, rel)
000A .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
000A .dbsym e w_ptr _w_ptr pc
000A _r_ptr::
000A .blkw 1
.area idata
000A 2A00 .word _ECG_data
.area data(ram, con, rel)
000C .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
000C .dbsym e r_ptr _r_ptr pc
000C _second::
000C .blkb 1
.area idata
000C 80 .byte 128
.area data(ram, con, rel)
000D .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
000D .dbsym e second _second c
000D _led_flag::
000D .blkb 1
.area idata
000D 00 .byte 0
.area data(ram, con, rel)
000E .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
000E .dbsym e led_flag _led_flag c
.area vector(rom, abs)
.org 24
0018 0C940000 jmp _Int_DR
.area data(ram, con, rel)
000E .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
.area text(rom, con, rel)
0000 .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
0000 .dbfunc e Int_DR _Int_DR fV
.even
0000 _Int_DR::
0000 0E940000 xcall push_lset
0004 .dbline -1
0004 .dbline 39
0004 ; /*
0004 ; *2008,浙江工业大学信息与控制研究所
0004 ; *All rights reserved
0004 ; *
0004 ; *文件名称:ECG_NRF905.C
0004 ; *摘 要:主函数,实现心电数据的采集,发送
0004 ; *
0004 ; *当前版本:1.0
0004 ; *作 者:董齐芬
0004 ; *完成日期:2008.5.17
0004 ; *
0004 ; *取代版本:
0004 ; *原 作 者:
0004 ; *完成日期:
0004 ; */
0004 ;
0004 ; //#include "time.h"
0004 ; //#include "mcp42010.h"
0004 ; //#include "adc.h"
0004 ; #include "nrf.h"
0004 ; #include "common.h"
0004 ; #include "spi.h"
0004 ; #include "int.h"
0004 ;
0004 ; unsigned char receive_addr[4]={0x56,0x31,0x56,0x31}; //4字节的接收地址a513d36a
0004 ; unsigned char send_addr[4]={0x13,0x65,0x13,0x65}; //4字节的发送地址
0004 ; unsigned char ECG_data[ECG_LENGTH]; //存放心电数据1024个
0004 ; unsigned char *w_ptr=ECG_data; //将采集到的数据存放到存储区的地址指针
0004 ; unsigned char *r_ptr=ECG_data; //无线发送时数据存储区的地址指针
0004 ; unsigned char nrf_data[PACKAGE_LENGTH]; //正要发送的无线数据包 0x5f+心电数据+序列号
0004 ; unsigned char receive_data[PACKAGE_LENGTH]; //接收到的无线数据包 0x5f+心电数据+序列号
0004 ; unsigned char second=0x80; //秒的次序,8秒一次循环
0004 ; unsigned char led_flag=0;
0004 ;
0004 ; void mcu_init(void); //声明处理器初始化函数
0004 ;
0004 ; #pragma interrupt_handler Int_DR: 7
0004 ; void Int_DR(void) //外部中断INT5,中断向量号为7,接收数无线据
0004 ; {
0004 .dbline 40
0004 ; LED_YELLOW;
0004 D89A sbi 0x1b,0
0006 .dbline 40
0006 D998 cbi 0x1b,1
0008 .dbline 40
0008 .dbline 41
0008 ; RxPacket(receive_data);
0008 00E0 ldi R16,<_receive_data
000A 10E0 ldi R17,>_receive_data
000C 0E940000 xcall _RxPacket
0010 .dbline -2
0010 L1:
0010 0E940000 xcall pop_lset
0014 .dbline 0 ; func end
0014 1895 reti
0016 .dbend
0016 .dbfunc e main _main fV
0016 ; j -> <dead>
0016 ; s -> R20
0016 ; i -> R22
.even
0016 _main::
0016 .dbline -1
0016 .dbline 53
0016 ; //////////////////////还应改变一下缓冲区的指针(接收多个包时)
0016 ;
0016 ; }
0016 ;
0016 ; /*
0016 ; *函数功能:主函数
0016 ; *输入参数:无
0016 ; *输出参数:无
0016 ; *返 回 值:无
0016 ; */
0016 ; void main(void)
0016 ; {
0016 .dbline 55
0016 ; unsigned char i,j,s;
0016 ; s=0;
0016 4427 clr R20
0018 .dbline 57
0018 ;
0018 ; CLI(); //disable all interrupts
0018 F894 cli
001A .dbline 58
001A ; mcu_init(); //处理器各模块初始化
001A 3DD0 xcall _mcu_init
001C .dbline 60
001C ;
001C ; for (i=0;i<PACKAGE_LENGTH-1;i++)
001C 6627 clr R22
001E 08C0 xjmp L6
0020 L3:
0020 .dbline 61
0020 .dbline 62
0020 80E0 ldi R24,<_nrf_data
0022 90E0 ldi R25,>_nrf_data
0024 E62F mov R30,R22
0026 FF27 clr R31
0028 E80F add R30,R24
002A F91F adc R31,R25
002C 6083 std z+0,R22
002E .dbline 63
002E L4:
002E .dbline 60
002E 6395 inc R22
0030 L6:
0030 .dbline 60
0030 6431 cpi R22,20
0032 B0F3 brlo L3
0034 2EC0 xjmp L8
0036 L7:
0036 .dbline 66
0036 ; {
0036 ; nrf_data[i]=i; //测试数据,每个数据包的前PACKAGE_LENGTH-1个数据都一致,最后一个字节为数据包的序列号
0036 ; }
0036 ;
0036 ; while (1)
0036 ; {
0036 .dbline 68
0036 ;
0036 ; nrf_data[PACKAGE_LENGTH-1]=s; //代表数据包的序列号
0036 40932900 sts _nrf_data+20,R20
003A .dbline 69
003A ; set_Tmode(); //把905设置成发送模式
003A 0E940000 xcall _set_Tmode
003E .dbline 70
003E ; EIMSK&=~BIT(5); //发送时将屏蔽外部中断5
003E 89B7 in R24,0x39
0040 8F7D andi R24,223
0042 89BF out 0x39,R24
0044 .dbline 71
0044 ; LED_RED;
0044 D898 cbi 0x1b,0
0046 .dbline 71
0046 D99A sbi 0x1b,1
0048 .dbline 71
0048 .dbline 72
0048 ; set_Taddr(send_addr);
0048 00E0 ldi R16,<_send_addr
004A 10E0 ldi R17,>_send_addr
004C 0E940000 xcall _set_Taddr
0050 .dbline 73
0050 ; TxPacket(nrf_data);
0050 00E0 ldi R16,<_nrf_data
0052 10E0 ldi R17,>_nrf_data
0054 0E940000 xcall _TxPacket
0058 .dbline 75
0058 ;
0058 ; if (led_flag)
0058 20900D00 lds R2,_led_flag
005C 2220 tst R2
005E 31F0 breq L11
0060 .dbline 76
0060 ; {
0060 .dbline 77
0060 ; LED_RED;
0060 D898 cbi 0x1b,0
0062 .dbline 77
0062 D99A sbi 0x1b,1
0064 .dbline 77
0064 .dbline 78
0064 ; led_flag=0;
0064 2224 clr R2
0066 20920D00 sts _led_flag,R2
006A .dbline 79
006A ; }
006A 05C0 xjmp L12
006C L11:
006C .dbline 81
006C ; else
006C ; {
006C .dbline 82
006C ; LED_YELLOW;
006C D89A sbi 0x1b,0
006E .dbline 82
006E D998 cbi 0x1b,1
0070 .dbline 82
0070 .dbline 83
0070 ; led_flag=1;
0070 81E0 ldi R24,1
0072 80930D00 sts _led_flag,R24
0076 .dbline 84
0076 ; }
0076 L12:
0076 .dbline 86
0076 ;
0076 ; EIFR|=0XFF; //清除外部中断的标志位
0076 88B7 in R24,0x38
0078 8F6F ori R24,255
007A 88BF out 0x38,R24
007C .dbline 87
007C ; set_Rmode(); //nRF设置成接收模式 必须有下一句的开启外部中断5和上一句的清除外部中断的标志位
007C 0E940000 xcall _set_Rmode
0080 .dbline 88
0080 ; EIMSK|=BIT(5); //开启外部中断5,以监测是无线模块是否收到数据
0080 89B7 in R24,0x39
0082 8062 ori R24,32
0084 89BF out 0x39,R24
0086 .dbline 90
0086 ;
0086 ; Delays(); //延时一段时间继续发送
0086 0E940000 xcall _Delays
008A .dbline 91
008A ; s++;
008A 4395 inc R20
008C .dbline 92
008C ; if (s==250)
008C 4A3F cpi R20,250
008E 09F4 brne L13
0090 .dbline 93
0090 ; {
0090 .dbline 94
0090 ; s=0;
0090 4427 clr R20
0092 .dbline 95
0092 ; }
0092 L13:
0092 .dbline 96
0092 L8:
0092 .dbline 65
0092 D1CF xjmp L7
0094 X0:
0094 .dbline -2
0094 L2:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbsym l j 1 c
0096 .dbsym r s 20 c
0096 .dbsym r i 22 c
0096 .dbend
0096 .dbfunc e mcu_init _mcu_init fV
.even
0096 _mcu_init::
0096 .dbline -1
0096 .dbline 107
0096 ; }
0096 ; }
0096 ;
0096 ;
0096 ; /*
0096 ; *函数功能:处理器初始化函数,将要用到的各个模块的初始化函数放在一起
0096 ; *输入参数:无
0096 ; *输出参数:无
0096 ; *返 回 值:无
0096 ; */
0096 ; void mcu_init(void)
0096 ; {
0096 .dbline 108
0096 ; initled(); //led灯初始化
0096 0E940000 xcall _initled
009A .dbline 109
009A ; initbuzzer(); //蜂鸣器初始化
009A 0E940000 xcall _initbuzzer
009E .dbline 110
009E ; init_spi();
009E 0E940000 xcall _init_spi
00A2 .dbline 111
00A2 ; init_905(); //nrf905上电初始化
00A2 0E940000 xcall _init_905
00A6 .dbline 112
00A6 ; set_confword(receive_addr);//设置905配置寄存器
00A6 00E0 ldi R16,<_receive_addr
00A8 10E0 ldi R17,>_receive_addr
00AA 0E940000 xcall _set_confword
00AE .dbline 113
00AE ; send_conf(); //配置寄存器内容
00AE 0E940000 xcall _send_conf
00B2 .dbline 114
00B2 ; init_INT(); //DR引脚中断初始化
00B2 0E940000 xcall _init_INT
00B6 .dbline -2
00B6 L15:
00B6 .dbline 0 ; func end
00B6 0895 ret
00B8 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\main.c
0000 _receive_data::
0000 .blkb 21
0015 .dbsym e receive_data _receive_data A[21:21]c
0015 _nrf_data::
0015 .blkb 21
002A .dbsym e nrf_data _nrf_data A[21:21]c
002A _ECG_data::
002A .blkb 1024
042A .dbsym e ECG_data _ECG_data A[1024:1024]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -