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

📄 main.lst

📁 本程序为编码器调节电压,能校对:输出电压,输入电压,与校对调节输出的电压值,适合做通用数字电源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
  81:lcdinf.c      **** w_com(0x40);
 411               	.LM49:
 412 0106 80E4      		ldi r24,lo8(64)
 413 0108 0E94 0000 		call w_com
  82:lcdinf.c      **** 
  83:lcdinf.c      **** /*
  84:lcdinf.c      **** dlay2(80);
  85:lcdinf.c      **** w_by(0x40);
  86:lcdinf.c      **** 
  87:lcdinf.c      **** dlay2(80);
  88:lcdinf.c      **** 
  89:lcdinf.c      **** w_by(0xff);
  90:lcdinf.c      **** dlay2(80);
  91:lcdinf.c      **** w_by(0);
  92:lcdinf.c      **** dlay2(80);
  93:lcdinf.c      **** w_by(0xff);
  94:lcdinf.c      **** dlay2(80);
  95:lcdinf.c      **** w_by(0);
  96:lcdinf.c      **** dlay2(80);
  97:lcdinf.c      **** w_by(0xff);
  98:lcdinf.c      **** dlay2(80);
  99:lcdinf.c      **** w_by(0);
 100:lcdinf.c      **** dlay2(80);
 101:lcdinf.c      **** w_by(0xff);
 102:lcdinf.c      **** */
 103:lcdinf.c      **** 
 104:lcdinf.c      **** for(x=200;x!=0;x--)dlay2(250);
 415               	.LM50:
 416 010c C8EC      		ldi r28,lo8(-56)
 417               	.L33:
 418 010e 8AEF      		ldi r24,lo8(-6)
 419 0110 0E94 0000 		call dlay2
 420 0114 C150      		subi r28,lo8(-(-1))
 421 0116 D9F7      		brne .L33
 422               	/* epilogue: frame size=0 */
 423 0118 CF91      		pop r28
 424 011a 0895      		ret
 425               	/* epilogue end (size=2) */
 426               	/* function lcdini size 55 (52) */
 431               	.Lscope6:
 435               	.global	dis_chs
 437               	dis_chs:
 105:lcdinf.c      **** }
 106:lcdinf.c      **** void dis_chs(char *ch,uch a)
 107:lcdinf.c      **** {
 439               	.LM51:
 440               	/* prologue: frame size=0 */
 441               	/* prologue end (size=0) */
 442 011c DC01      		movw r26,r24
 443 011e E62F      		mov r30,r22
 444 0120 FF27      		clr r31
 445 0122 83E0      		ldi r24,3
 446 0124 EE0F      	1:	lsl r30
 447 0126 FF1F      		rol r31
 448 0128 8A95      		dec r24
 449 012a E1F7      		brne 1b
 450 012c E050      		subi r30,lo8(-(xy_ch))
 451 012e F040      		sbci r31,hi8(-(xy_ch))
 452 0130 97E0      		ldi r25,lo8(7)
 453               	.L46:
 108:lcdinf.c      **** uch i;
 109:lcdinf.c      ****    for(i=0;i<8;i++){
 110:lcdinf.c      ****    xy_ch[a][i]=*ch;
 455               	.LM52:
 456 0132 8D91      		ld r24,X+
 457 0134 8193      		st Z+,r24
 459               	.LM53:
 460 0136 9150      		subi r25,lo8(-(-1))
 461 0138 97FF      		sbrs r25,7
 462 013a FBCF      		rjmp .L46
 463               	/* epilogue: frame size=0 */
 464 013c 0895      		ret
 465               	/* epilogue end (size=1) */
 466               	/* function dis_chs size 17 (16) */
 471               	.Lscope7:
 475               	.global	adc_maxmin
 477               	adc_maxmin:
 479               	.Ltext2:
   1:main.c        **** /*eeprom_is_ready() //EEPROM 忙检测(返回EEWE 位)
   2:main.c        **** eeprom_busy_wait() //查询等待EEPROM 准备就绪
   3:main.c        **** uint8_t eeprom_read_byte (const uint8_t *addr) //从指定地址读一字节
   4:main.c        **** uint16_t eeprom_read_word (const uint16_t *addr) //从指定地址一字
   5:main.c        **** void eeprom_read_block (void *buf, const void *addr, size_t n) //读块
   6:main.c        **** void eeprom_write_byte (uint8_t *addr, uint8_t val) //写一字节至指定地址
   7:main.c        **** void eeprom_write_word (uint16_t *addr, uint16_t val) //写一字到指定地址
   8:main.c        **** void eeprom_write_block (const void *buf, void *addr, size_t n)//写块*/
   9:main.c        **** /*
  10:main.c        **** SIG_INTERRUPT0 外部中断INT0
  11:main.c        **** SIG_INTERRUPT1 外部中断INT1
  12:main.c        **** SIG_OUTPUT_COMPARE2 定时器/计数器比较匹配中断
  13:main.c        **** SIG_OVERFLOW2 定时器/计数器2 溢出中断
  14:main.c        **** SIG_INPUT_CAPTURE1 定时器/计数器2 输入捕获中断
  15:main.c        **** SIG_OUTPUT_COMPARE1A 定时器/计数器1 比较匹配A
  16:main.c        **** SIG_OUTPUT_COMPARE1B 定时器/计数器1 比较匹配B
  17:main.c        **** SIG_OVERFLOW1 定时器/计数器1 溢出中断
  18:main.c        **** SIG_OVERFLOW0 定时器/计数器0 溢出中断
  19:main.c        **** SIG_SPI SPI 操作完成中断
  20:main.c        **** SIG_UART_RECV USART 接收完成
  21:main.c        **** SIG_UART_DATA USART 寄存器空
  22:main.c        **** SIG_UART_TRANS USART 发送完成
  23:main.c        **** SIG_ADC ADC转换完成
  24:main.c        **** SIG_EEPROM_READY E2PROM 准备就绪
  25:main.c        **** SIG_COMPARATOR 模拟比较器中断
  26:main.c        **** SIG_2WIRE_SERIAL TWI 中断
  27:main.c        **** SIG_SPM_READY 写程序存储器准备好
  28:main.c        **** */
  29:main.c        **** #include <avr/io.h>
  30:main.c        **** #include <util/delay.h>
  31:main.c        **** #include <avr/interrupt.h>
  32:main.c        **** #include <avr/eeprom.h>
  33:main.c        **** #define PWM_our  OCR1A
  34:main.c        **** #define PWM      OCR1B
  35:main.c        **** #include "lcdinf.c"
  36:main.c        **** #define V_max 300
  37:main.c        **** #define di    di1=10;
  38:main.c        **** #define DLD di1=20;di2=60;di3=20
  39:main.c        **** #define DIH   PORTD|=0x80
  40:main.c        **** #define DIL   PORTD&=0x7f
  41:main.c        **** #define key_in  (~PINA)
  42:main.c        **** uch di1,di2,di3;
  43:main.c        **** uch tep2;
  44:main.c        **** uch ks,ks2;
  45:main.c        **** #define set  0x80
  46:main.c        **** #define fun  0x40
  47:main.c        **** //参数的地址
  48:main.c        **** #define vihas 0
  49:main.c        **** #define vohas 2
  50:main.c        **** #define volas 4
  51:main.c        **** #define pohas 6
  52:main.c        **** #define polas 8
  53:main.c        **** #define poas 10
  54:main.c        **** char *ch_sp;
  55:main.c        **** uch ch_x;
  56:main.c        **** uch ch_s=1;
  57:main.c        **** uch key;//按键;
  58:main.c        **** uch int_;//编码
  59:main.c        **** uch up;//加十标志
  60:main.c        **** uch make;
  61:main.c        **** unsigned long power;//输出电压值
  62:main.c        **** uint power_max;//当前最大电压设置
  63:main.c        **** uint vi;//输出电压
  64:main.c        **** uint vo;//输出电压值
  65:main.c        **** uint va;//输出电流值
  66:main.c        **** uint vi2;//输出电压
  67:main.c        **** uint vo2;//输出电压值
  68:main.c        **** uint va2;//输出电流值
  69:main.c        **** uint adc_1,adc_2,adc_3;
  70:main.c        **** uint vo_a[10];//三个变量的数组
  71:main.c        **** uint vi_a[10];
  72:main.c        **** uint va_a[10];
  73:main.c        **** 
  74:main.c        **** uint vi_kh;//每能道的修正系数
  75:main.c        **** 
  76:main.c        **** uint vo_kh;
  77:main.c        **** uint vo_kl;
  78:main.c        **** 
  79:main.c        **** uint po_kh;
  80:main.c        **** uint po_kl;
  81:main.c        **** //----------------------
  82:main.c        **** uch xiao;
  83:main.c        **** 
  84:main.c        **** uint adc_maxmin(uint *xp,uch _tep){
 481               	.LM54:
 482               	/* prologue: frame size=0 */
 483 013e 1F93      		push r17
 484 0140 CF93      		push r28
 485 0142 DF93      		push r29
 486               	/* prologue end (size=3) */
 487 0144 EC01      		movw r28,r24
  85:main.c        **** unsigned char i;
  86:main.c        **** int ret;
  87:main.c        **** int ret_tep;
  88:main.c        **** unsigned char max_id,min_id,max_value,min_value;
  89:main.c        **** ret=0;
 489               	.LM55:
 490 0146 60E0      		ldi r22,lo8(0)
 491 0148 70E0      		ldi r23,hi8(0)
 492 014a 48E0      		ldi r20,lo8(8)
 493 014c FC01      		movw r30,r24
 494 014e 3296      		adiw r30,2
 495               	.L53:
  90:main.c        **** for(i=1;i<10;i++)
  91:main.c        **** ret+=*(xp+i);
 497               	.LM56:
 498 0150 8191      		ld r24,Z+
 499 0152 9191      		ld r25,Z+
 500 0154 680F      		add r22,r24
 501 0156 791F      		adc r23,r25
 503               	.LM57:
 504 0158 4150      		subi r20,lo8(-(-1))
 505 015a 47FF      		sbrs r20,7
 506 015c F9CF      		rjmp .L53
  92:main.c        **** //找到最大和最小值索引
  93:main.c        **** ret/=10;
 508               	.LM58:
 509 015e CB01      		movw r24,r22
 510 0160 6AE0      		ldi r22,lo8(10)
 511 0162 70E0      		ldi r23,hi8(10)
 512 0164 0E94 0000 		call __divmodhi4
  94:main.c        **** max_id=min_id=1;
 514               	.LM59:
 515 0168 B1E0      		ldi r27,lo8(1)
 516 016a 1B2F      		mov r17,r27
  95:main.c        **** max_value=min_value=0;
 518               	.LM60:
 519 016c A0E0      		ldi r26,lo8(0)
 520 016e 5A2F      		mov r21,r26
  96:main.c        **** for(i=1;i<10;i++)
 522               	.LM61:
 523 0170 4B2F      		mov r20,r27
 524 0172 FE01      		movw r30,r28
 525 0174 3296      		adiw r30,2
 526               	.L61:
  97:main.c        **** {
  98:main.c        **** if(*(xp+i)>ret)
 528               	.LM62:
 529 0176 2081      		ld r18,Z
 530 0178 3181      		ldd r19,Z+1
 531 017a 6217      		cp r22,r18
 532 017c 7307      		cpc r23,r19
 533 017e 58F4      		brsh .L57
  99:main.c        **** {
 100:main.c        **** if(*(xp+i)-ret>max_value)
 535               	.LM63:
 536 0180 261B      		sub r18,r22
 537 0182 370B      		sbc r19,r23
 538 0184 852F      		mov r24,r21
 539 0186 9927      		clr r25
 540 0188 8217      		cp r24,r18
 541 018a 9307      		cpc r25,r19
 542 018c 88F4      		brsh .L56
 101:main.c        **** {
 102:main.c        **** max_value=*(xp+i)-ret;
 544               	.LM64:
 545 018e 5081      		ld r21,Z
 546 0190 561B      		sub r21,r22
 103:main.c        **** max_id=i;
 548               	.LM65:
 549 0192 142F      		mov r17,r20
 550 0194 0DC0      		rjmp .L56
 551               	.L57:
 104:main.c        **** }
 105:main.c        **** }
 106:main.c        **** else
 107:main.c        **** {
 108:main.c        **** if(ret-*(xp+i)>min_value)
 553               	.LM66:
 554 0196 CB01      		movw r24,r22
 555 0198 821B      		sub r24,r18
 556 019a 930B      		sbc r25,r19
 557 019c 9C01      		movw r18,r24
 558 019e 8A2F      		mov r24,r26
 559 01a0 9927      		clr r25
 560 01a2 8217      		cp r24,r18
 561 01a4 9307      		cpc r25,r19
 562 01a6 20F4      		brsh .L56
 109:main.c        **** {
 110:main.c        **** min_value=ret-*(xp+i);
 564               	.LM67:
 565 01a8 8081      		ld r24,Z
 566 01aa A62F      		mov r26,r22
 567 01ac A81B      		sub r26,r24
 111:main.c        **** min_id=i;
 569               	.LM68:
 570 01ae B42F      		mov r27,r20
 571               	.L56:
 573               	.LM69:
 574 01b0 4F5F      		subi r20,lo8(-(1))
 575 01b2 3296      		adiw r30,2
 576 01b4 4A30      		cpi r20,lo8(10)
 577 01b6 F8F2      		brlo .L61
 112:main.c        **** }
 113:main.c        **** }
 114:main.c        **** }
 115:main.c        **** //去掉第一个和最大最小值后的平均值
 116:main.c        **** ret=0;
 579               	.LM70:
 580 01b8 60E0      		ldi r22,lo8(0)
 581 01ba 70E0      		ldi r23,hi8(0)
 117:main.c        **** for(i=1;i<10;i++)
 583               	.LM71:
 584 01bc 41E0      		ldi r20,lo8(1)
 585 01be FE01      		movw r30,r28
 586 01c0 3296      		adiw r30,2
 587               	.L66:
 118:main.c        **** {
 119:main.c        **** if((i!=min_id)&&(i!=max_id))
 589               	.LM72:
 590 01c2 4B17      		cp r20,r27
 591 01c4 31F0      		breq .L64
 592 01c6 4117      		cp r20,r17
 593 01c8 21F0      		breq .L64
 120:main.c        **** ret+=*(xp+i);
 595               	.LM73:
 596 01ca 8081      		ld r24,Z
 597 01cc 9181      		ldd r25,Z+1
 598 01ce 680F      		add r22,r24
 599 01d0 791F      		adc r23,r25
 600               	.L64:
 602               	.LM74:
 603 01d2 4F5F      		subi r20,lo8(-(1))
 604 01d4 3296      		adiw r30,2
 605 01d6 4A30      		cpi r20,lo8(10)
 606 01d8 A0F3      		brlo .L66
 121:main.c        **** }
 122:main.c        **** if(min_id!=max_id)
 608               	.LM75:
 609 01da B117      		cp r27,r17
 610 01dc 31F0      		breq .L67
 123:main.c        **** ret/=7;
 612               	.LM76:
 613 01de CB01      		movw r24,r22
 614 01e0 67E0      		ldi r22,lo8(7)
 615 01e2 70E0      		ldi r23,hi8(7)
 616 01e4 0E94 0000 		call __divmodhi4
 617 01e8 09C0      		rjmp .L68
 618               	.L67:
 124:main.c        **** else
 125:main.c        **** ret/=8;
 620               	.LM77:
 621 01ea CB01      		movw r24,r22
 622 01ec 77FD      		sbrc r23,7
 623 01ee 0796      		adiw r24,7
 624               	.L69:
 625 01f0 BC01      		movw r22,r24
 626 01f2 93E0      		ldi r25,3
 627 01f4 7595      	1:	asr r23
 628 01f6 6795      		ror r22
 629 01f8 9A95      		dec r25
 630 01fa E1F7      		brne 1b
 631               	.L68:
 126:main.c        **** return ret; 
 127:main.c        **** }
 633               	.LM78:
 634 01fc CB01      		movw r24,r22
 635               	/* epilogue: frame size=0 */
 636 01fe DF91      		pop r29
 637 0200 CF91      		pop r28
 638 0202 1F91      		pop r17
 639 0204 0895      		ret
 640               	/* epilogue end (size=4) */
 641               	/* function adc_maxmin size 101 (94) */
 651               	.Lscope8:
 652               		.lcomm x.0,1
 653               		.lcomm y.1,1
 655               	.global	adc_sy
 657               	adc_sy:
 128:main.c        **** void adc_sy(void){

⌨️ 快捷键说明

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