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

📄 main.s

📁 modbus RTU 的AVR单片机C语言程序。 单片机mega16,编译器ICCAVR。
💻 S
字号:
	.module main.c
	.area vector(rom, abs)
	.org 36
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\main.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	in R2,0x3f
	st -y,R2
	xcall push_gset2
	.dbline -1
	.dbline 25
; //ICC-AVR application builder : 2004-10-27 10:06:29
; // Target : M16
; // Crystal: 8.0000Mhz
; 
; /*****************************************************
; 微控电子 www.mcuc.cn
; modbus RTU 的mega16程序,使用ICCAVR编译
; 单片机mega16
; 通信波特率 9600 8位数据 1位停止位 偶校验 485通位接口
; 单片机控制板地址 localAddr(变量)
; 通信可设置数据的地址:
; 字地址 0 - 255 (只取16位的低8位)
; 位地址 0 - 255 (只取16位的低8位)
; ******************************************************/
; 
; 
; #include "main.h"
; 
; uint32 tickCount,intTickCount;
; uint8 flag1ms,c200ms;
; 
; #pragma interrupt_handler timer0_ovf_isr:10
; //定时器0 1ms定时中断
; void timer0_ovf_isr(void)
; {
	.dbline 26
;  TCNT0 = 0x83;
	ldi R24,131
	out 0x32,R24
	.dbline 27
;  intTickCount++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_intTickCount+2
	lds R5,_intTickCount+2+1
	lds R2,_intTickCount
	lds R3,_intTickCount+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _intTickCount+1,R3
	sts _intTickCount,R2
	sts _intTickCount+2+1,R5
	sts _intTickCount+2,R4
	.dbline 28
;  flag1ms = 1;	//1ms 时间到
	ldi R24,1
	sts _flag1ms,R24
	.dbline -2
	.dbline 40
;  
; /*
;  if(adcCount<=SAMPLECOUNT-1 && adcCount>=0)
;  	adcData[adcCount] = ADC & 0x3ff; //读取AD数据
;  if(adcCount >= 0)
;  {
;     ADMUX = 0xc0 |(adcMux&0x0f); 
;   	ADCSR |= 1 << ADSC; //启动ADC 
;  	adcCount--;
;  }
; */  
; }//void timer0_ovf_isr(void)
L1:
	xcall pop_gset2
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\main.c
L3:
	.blkb 2
L4:
	.blkb 1
	.area text(rom, con, rel)
	.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\main.c
	.dbfunc e timeProc _timeProc fV
	.dbsym s i L4 c
	.dbsym s second L3 i
	.even
_timeProc::
	.dbline -1
	.dbline 43
; 
; void timeProc(void)
; {
	.dbline 47
;  static uint16 second;
;  static uint8 i;
;  
;  if(flag1ms == 1)
	lds R24,_flag1ms
	cpi R24,1
	breq X0
	xjmp L5
X0:
	.dbline 48
;  {
	.dbline 49
;   flag1ms = 0; 
	clr R2
	sts _flag1ms,R2
	.dbline 50
;   CLI();
	cli
	.dbline 51
;   tickCount = intTickCount;
	lds R4,_intTickCount+2
	lds R5,_intTickCount+2+1
	lds R2,_intTickCount
	lds R3,_intTickCount+1
	sts _tickCount+1,R3
	sts _tickCount,R2
	sts _tickCount+2+1,R5
	sts _tickCount+2,R4
	.dbline 52
;   SEI();
	sei
	.dbline 54
;   
;    if(receTimeOut>0)
	clr R2
	lds R3,_receTimeOut
	cp R2,R3
	brsh L7
	.dbline 55
;    {
	.dbline 56
;        receTimeOut--;
	mov R24,R3
	subi R24,1
	sts _receTimeOut,R24
	.dbline 57
;        if(receTimeOut==0 && receCount>0)   //判断通讯接收是否超时
	tst R24
	brne L9
	lds R3,_receCount
	cp R2,R3
	brsh L9
	.dbline 58
;        {
	.dbline 59
;            receEnable();       //将485置为接收状态
	cbi 0x18,7
	.dbline 60
;            receCount = 0;      //将接收地址偏移寄存器清零
	sts _receCount,R2
	.dbline 61
; 		   checkoutError = 0;
	sts _checkoutError,R2
	.dbline 62
;        }
L9:
	.dbline 63
;    }
L7:
	.dbline 65
;   
;   c200ms++;
	lds R24,_c200ms
	subi R24,255    ; addi 1
	sts _c200ms,R24
	.dbline 66
;   if(c200ms > 100)
	ldi R24,100
	lds R2,_c200ms
	cp R24,R2
	brsh L11
	.dbline 67
;   {
	.dbline 68
;    c200ms = 0; 
	clr R2
	sts _c200ms,R2
	.dbline 69
;    blinkLed(); //运行指示灯闪烁  
	ldi R24,64
	in R2,0x18
	eor R2,R24
	out 0x18,R2
	.dbline 70
;   }
L11:
	.dbline 72
;   
;   second++;
	lds R24,L3
	lds R25,L3+1
	adiw R24,1
	sts L3+1,R25
	sts L3,R24
	.dbline 73
;   if(second > 10000)
	ldi R24,10000
	ldi R25,39
	lds R2,L3
	lds R3,L3+1
	cp R24,R2
	cpc R25,R3
	brsh L13
	.dbline 74
;   { 
	.dbline 75
;      second = 0;  
	clr R2
	clr R3
	sts L3+1,R3
	sts L3,R2
	.dbline 76
;   } 
L13:
	.dbline 77
L5:
	.dbline -2
	.dbline 78
;  }
; }//void timeProc(void)
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;              i -> R20,R21
	.even
_main::
	.dbline -1
	.dbline 81
; 
; void main(void)
; {
	.dbline 84
;  int16 i;
;  
;  varInit();
	xcall _varInit
	.dbline 85
;  init_devices();
	xcall _init_devices
	.dbline 88
;  
;  //重新采样
;  CLI();	
	cli
	.dbline 89
;  SEI(); 
	sei
	.dbline 91
;   
;  for(i=0;i<400;i++)
	clr R20
	clr R21
L16:
	.dbline 92
	.dbline 94
L17:
	.dbline 91
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 91
	cpi R20,144
	ldi R30,1
	cpc R21,R30
	brlt L16
	xjmp L21
L20:
	.dbline 97
	.dbline 98
	wdr
	.dbline 100
	xcall _timeProc
	.dbline 101
	xcall _checkComm0Modbus
	.dbline 103
L21:
	.dbline 96
	xjmp L20
X1:
	.dbline -2
	.dbline 104
;  {
; 
;  }
; 		 
;  while(1)
;  { 
;   WDR(); //this prevents a timout on enabling  	
;   
;   timeProc();	
;   checkComm0Modbus();  
;  
;  }
; }
L15:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\main.c
_c200ms::
	.blkb 1
	.dbsym e c200ms _c200ms c
_flag1ms::
	.blkb 1
	.dbsym e flag1ms _flag1ms c
_intTickCount::
	.blkb 4
	.dbsym e intTickCount _intTickCount l
_tickCount::
	.blkb 4
	.dbsym e tickCount _tickCount l

⌨️ 快捷键说明

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