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