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

📄 test_c.lst

📁 电压计(c语言编写的) 通过led灯显示 电路图说明: 1、R1、R2、D1、D2 组成发光二极管显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    001B E5CF      LDI	R28,0x5F
    001C E0D4      LDI	R29,4
    001D BFCD      OUT	0x3D,R28
    001E BFDE      OUT	0x3E,R29
    001F 51C0      SUBI	R28,0x10
    0020 40D0      SBCI	R29,0
    0021 EA0A      LDI	R16,0xAA
    0022 8308      STD	Y+0,R16
    0023 2400      CLR	R0
    0024 E7E0      LDI	R30,0x70
    0025 E0F0      LDI	R31,0
    0026 E010      LDI	R17,0
    0027 37E2      CPI	R30,0x72
    0028 07F1      CPC	R31,R17
    0029 F011      BEQ	0x002C
    002A 9201      ST	R0,Z+
    002B CFFB      RJMP	0x0027
    002C 8300      STD	Z+0,R16
    002D E2E6      LDI	R30,0x26
    002E E0F0      LDI	R31,0
    002F E6A0      LDI	R26,0x60
    0030 E0B0      LDI	R27,0
    0031 E010      LDI	R17,0
    0032 33E6      CPI	R30,0x36
    0033 07F1      CPC	R31,R17
    0034 F021      BEQ	0x0039
    0035 95C8      LPM
    0036 9631      ADIW	R30,1
    0037 920D      ST	R0,X+
    0038 CFF9      RJMP	0x0032
    0039 D001      RCALL	_main
_exit:
    003A CFFF      RJMP	_exit
FILE: E:\avrc\disp.c
(0001) #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
(0002) #include <macros.h>
(0003) #include <stdio.h>
(0004) #define uchar unsigned char
(0005) #define uint unsigned int
(0006) void send_byte(uchar x);
(0007) void disp_led(uchar buffer,uchar control);
(0008) void delay_1ms(void); 
(0009) void delay_nms(unsigned int n);
(0010) uchar  disp_table[16] = {
(0011) 	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0012) 	0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0013) uint count;
(0014) void main(void)
(0015) {   
(0016)     uint i;
(0017) 	int j;
(0018)   	OSCCAL=0X9d;//系统时钟校准,不同的芯片和不同的频率,
_main:
  i                    --> Y+1
  j                    --> R20
    003B E98D      LDI	R24,0x9D
    003C BF81      OUT	0x31,R24
(0019)   	DDRB=0x03; //定义B口的PB0、PB1为输出口
    003D E083      LDI	R24,3
    003E BB87      OUT	0x17,R24
(0020)   	DDRC=0x30;
    003F E380      LDI	R24,0x30
    0040 BB84      OUT	0x14,R24
(0021) 	WDR();       //看门狗计数清零
    0041 95A8      WDR
(0022)     WDTCR=0x0F;  //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S
    0042 E08F      LDI	R24,0xF
    0043 BD81      OUT	0x21,R24
(0023)     ADCSRA=0X00;
    0044 2422      CLR	R2
    0045 B826      OUT	0x06,R2
(0024) 	ADCSRA = 0x00; 
    0046 B826      OUT	0x06,R2
(0025)     ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
    0047 EC83      LDI	R24,0xC3
    0048 B987      OUT	0x07,R24
(0026)     ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
    0049 EC8E      LDI	R24,0xCE
    004A B986      OUT	0x06,R24
(0027) 	SEI();
    004B 9478      BSET	7
(0028)   	//PORTB=0B00000001; //PB0口输出高电平,PB1口输出低电平,绿灯亮
(0029)   	delay_nms(5000); //延时5秒
    004C E808      LDI	R16,0x88
    004D E113      LDI	R17,0x13
    004E D0C3      RCALL	_delay_nms
(0030)   	PORTB=0B00000010; //PB1口输出高电平,PB0口输出低电平,关闭绿灯,红灯亮
    004F E082      LDI	R24,2
    0050 BB88      OUT	0x18,R24
(0031)   	delay_nms(5000); //延时5秒
    0051 E808      LDI	R16,0x88
    0052 E113      LDI	R17,0x13
    0053 D0BE      RCALL	_delay_nms
(0032) 	disp_led(4,0);
    0054 2722      CLR	R18
    0055 E004      LDI	R16,4
    0056 D040      RCALL	_disp_led
    0057 C024      RJMP	0x007C
(0033)   	while(1) 
(0034)      {       
(0035) 	         PORTB=0B00000010;
    0058 E082      LDI	R24,2
    0059 BB88      OUT	0x18,R24
(0036) 	  		 delay_nms(100);
    005A E604      LDI	R16,0x64
    005B E010      LDI	R17,0
    005C D0B5      RCALL	_delay_nms
(0037) 			 j=((25600/1023)*(ADCH*256+ADCL))/1000;
    005D B125      IN	R18,0x05
    005E 2733      CLR	R19
    005F E000      LDI	R16,0
    0060 E011      LDI	R17,1
    0061 D101      RCALL	empy16s
    0062 0198      MOVW	R18,R16
    0063 B024      IN	R2,0x04
    0064 2433      CLR	R3
    0065 0D22      ADD	R18,R2
    0066 1D33      ADC	R19,R3
    0067 E109      LDI	R16,0x19
    0068 E010      LDI	R17,0
    0069 D0F9      RCALL	empy16s
    006A EE28      LDI	R18,0xE8
    006B E033      LDI	R19,3
    006C D0C1      RCALL	div16s
    006D 01A8      MOVW	R20,R16
(0038) 			 count=j;
    006E 93500071  STS	_count+1,R21
    0070 93400070  STS	_count,R20
(0039) 			 if(j>24)
    0072 E188      LDI	R24,0x18
    0073 E090      LDI	R25,0
    0074 1780      CP	R24,R16
    0075 0791      CPC	R25,R17
    0076 F414      BGE	0x0079
(0040) 			 PORTB=0B00000011; //翻转PB0和PB1口
    0077 E083      LDI	R24,3
    0078 BB88      OUT	0x18,R24
(0041) 			 disp_led(0,1);
    0079 E021      LDI	R18,1
    007A 2700      CLR	R16
    007B D01B      RCALL	_disp_led
    007C CFDB      RJMP	0x0058
(0042)     }
(0043) }
    007D 9508      RET
_send_byte:
  i                    --> R20
  x                    --> R22
    007E D10F      RCALL	push_gset2
    007F 2F60      MOV	R22,R16
(0044) void send_byte(uchar x)
(0045) {
(0046) 	uchar i;
(0047)  	for(i=0;i<8;i++)
    0080 2744      CLR	R20
    0081 C011      RJMP	0x0093
(0048)  	{
(0049)  		PORTC=0<<5;
    0082 2422      CLR	R2
    0083 BA25      OUT	0x15,R2
(0050) 		if((x&(1<<(7-i))))
    0084 E017      LDI	R17,7
    0085 1B14      SUB	R17,R20
    0086 E001      LDI	R16,1
    0087 D10C      RCALL	lsl8
    0088 2E26      MOV	R2,R22
    0089 2220      AND	R2,R16
    008A F019      BEQ	0x008E
(0051) 		PORTC=1<<4;
    008B E180      LDI	R24,0x10
    008C BB85      OUT	0x15,R24
    008D C002      RJMP	0x0090
(0052) 		else
(0053) 		PORTC=0<<4;
    008E 2422      CLR	R2
    008F BA25      OUT	0x15,R2
(0054) 		PORTC=1<<5;
    0090 E280      LDI	R24,0x20
    0091 BB85      OUT	0x15,R24
    0092 9543      INC	R20
    0093 3048      CPI	R20,0x8
    0094 F368      BCS	0x0082
(0055) 	}
(0056) }
    0095 D0DD      RCALL	pop_gset2
    0096 9508      RET
_disp_led:
  temp                 --> Y+0
  tempcount            --> R20
  i                    --> R22
  control              --> R20
  buffer               --> R10
    0097 D0F9      RCALL	push_gset3
    0098 2F42      MOV	R20,R18
    0099 2EA0      MOV	R10,R16
    009A 9726      SBIW	R28,6
(0057) void disp_led(uchar buffer,uchar control)
(0058) {
(0059) 	uchar i,temp[6];
(0060) 	uint tempcount;
(0061) 	switch(control)
    009B 2755      CLR	R21
    009C 3040      CPI	R20,0
    009D 0745      CPC	R20,R21
    009E F029      BEQ	0x00A4
    009F 3041      CPI	R20,1
    00A0 E0E0      LDI	R30,0
    00A1 075E      CPC	R21,R30
    00A2 F099      BEQ	0x00B6
    00A3 C05E      RJMP	0x0102
(0062) 	{
(0063) 		case 0:		//test
(0064) 		{
(0065) 			for(i=0;i<11;i++)
    00A4 2766      CLR	R22
    00A5 C00D      RJMP	0x00B3
(0066) 			send_byte(disp_table[buffer%10]);//显示数字
    00A6 E02A      LDI	R18,0xA
    00A7 E030      LDI	R19,0
    00A8 2D0A      MOV	R16,R10
    00A9 2711      CLR	R17
    00AA D07F      RCALL	mod16s
    00AB 01F8      MOVW	R30,R16
    00AC E680      LDI	R24,0x60
    00AD E090      LDI	R25,0
    00AE 0FE8      ADD	R30,R24
    00AF 1FF9      ADC	R31,R25
    00B0 8100      LDD	R16,Z+0
    00B1 DFCC      RCALL	_send_byte
    00B2 9563      INC	R22
    00B3 306B      CPI	R22,0xB
    00B4 F388      BCS	0x00A6
(0067) 			break;
    00B5 C04C      RJMP	0x0102
(0068) 		}
(0069) 		case 1:		//display count
(0070) 		{
(0071) 			tempcount=count;
    00B6 91400070  LDS	R20,_count
    00B8 91500071  LDS	R21,_count+1
(0072) 			for(i=0;i<6;i++)
    00BA 2766      CLR	R22
    00BB C010      RJMP	0x00CC
(0073) 			{
(0074) 				temp[i]=tempcount%10;
    00BC E02A      LDI	R18,0xA
    00BD E030      LDI	R19,0
    00BE 018A      MOVW	R16,R20
    00BF D087      RCALL	mod16u
    00C0 01CE      MOVW	R24,R28
    00C1 2FE6      MOV	R30,R22
    00C2 27FF      CLR	R31
    00C3 0FE8      ADD	R30,R24
    00C4 1FF9      ADC	R31,R25
    00C5 8300      STD	Z+0,R16
(0075) 				tempcount/=10;
    00C6 E02A      LDI	R18,0xA
    00C7 E030      LDI	R19,0
    00C8 018A      MOVW	R16,R20
    00C9 D07F      RCALL	div16u
    00CA 01A8      MOVW	R20,R16
    00CB 9563      INC	R22

⌨️ 快捷键说明

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