📄 echo.lst
字号:
(0135) lcd_set_rs(); // Set LCD to data
0254 9AD8 SBI 0x1B,0
0255 940E0471 CALL 0x471
0257 940E04BA CALL 0x4BA
(0136) lcd_set_e(); // Write data to LCD
(0137) asm("nop");
(0138) asm("nop");
(0139) lcd_clear_e(); // Disable LCD
(0140) LCD_OP_PORT = (Data << 4)|temp; // Load low-data to port
(0141) lcd_clear_rw() ; // Set LCD to write
(0142) lcd_set_rs(); // Set LCD to data
0259 9AD8 SBI 0x1B,0
025A 940E0471 CALL 0x471
(0143) lcd_set_e(); // Write data to LCD
(0144) asm("nop");
(0145) asm("nop");
(0146) lcd_clear_e(); // Disable LCD
(0147) }
025C D1B8 RCALL pop_gset2
025D 9508 RET
(0148) // ********************************* //
(0149) // *** Initialize the LCD driver *** //
(0150) // ********************************* //
(0151) void Init_LCD(void)
(0152) {
(0153) LCD_INIT();
_Init_LCD:
025E DFA7 RCALL _LCD_INIT
(0154) LCD_WriteControl (LCD_FUNCTION_SET);
025F E208 LDI R16,0x28
0260 DFDF RCALL _LCD_WriteControl
(0155) LCD_WriteControl (LCD_OFF);
0261 E008 LDI R16,0x8
0262 DFDD RCALL _LCD_WriteControl
(0156) LCD_WriteControl (LCD_CLEAR);
0263 E001 LDI R16,1
0264 DFDB RCALL _LCD_WriteControl
(0157) LCD_WriteControl (LCD_MODE_SET);
0265 E006 LDI R16,6
0266 DFD9 RCALL _LCD_WriteControl
(0158) LCD_WriteControl (LCD_ON);
0267 E00C LDI R16,0xC
0268 DFD7 RCALL _LCD_WriteControl
(0159) LCD_WriteControl (LCD_HOME);
0269 E002 LDI R16,2
(0160) }
026A CFD5 RJMP _LCD_WriteControl
(0161) // ************************************************ //
(0162) // *** Clear the LCD screen (also homes cursor) *** //
(0163) // ************************************************ //
(0164) void LCD_Clear(void)
(0165) {
(0166) LCD_WriteControl(0x01);
_LCD_Clear:
026B E001 LDI R16,1
(0167) }
026C CFD3 RJMP _LCD_WriteControl
(0168) // *********************************************** //
(0169) // *** Position the LCD cursor at row 1, col 1 *** //
(0170) // *********************************************** //
(0171) void LCD_Home(void)
(0172) {
(0173) LCD_WriteControl(0x02);
_LCD_Home:
026D E002 LDI R16,2
(0174) }
026E CFD1 RJMP _LCD_WriteControl
_LCD_DisplayCharacter:
Char --> R20
026F D1A9 RCALL push_gset1
0270 2F40 MOV R20,R16
(0175) // ****************************************************************** //
(0176) // *** Display a single character, at the current cursor location *** //
(0177) // ****************************************************************** //
(0178) void LCD_DisplayCharacter (char Char)
(0179) {
(0180) LCD_WriteData (Char);
0271 2F04 MOV R16,R20
0272 DFDC RCALL _LCD_WriteData
(0181) }
0273 D1A8 RCALL pop_gset1
0274 9508 RET
_LCD_DisplayString_F:
string --> R20
column --> R10
row --> R22
0275 D1BD RCALL push_gset3
0276 940E04AC CALL 0x4AC
(0182) // ********************************************************************* //
(0183) // *** Display a string at the specified row and column, using FLASH *** //
(0184) // ********************************************************************* //
(0185) void LCD_DisplayString_F (char row, char column ,const unsigned char *string)
(0186) {
(0187) LCD_Cursor (row, column);
0278 D01C RCALL _LCD_Cursor
0279 C006 RJMP 0x0280
(0188) while (*string)
(0189) {
(0190) LCD_DisplayCharacter (*string++);
027A 011A MOVW R2,R20
027B 5F4F SUBI R20,0xFF
027C 4F5F SBCI R21,0xFF
027D 01F1 MOVW R30,R2
027E 9104 LPM R16,0(Z)
027F DFEF RCALL _LCD_DisplayCharacter
0280 01FA MOVW R30,R20
0281 91E4 LPM R30,0(Z)
0282 23EE TST R30
0283 F7B1 BNE 0x027A
(0191) }
(0192) }
0284 D192 RCALL pop_gset3
0285 9508 RET
_LCD_DisplayString:
string --> R20
column --> R10
row --> R22
0286 D1AC RCALL push_gset3
0287 940E04AC CALL 0x4AC
(0193) // ******************************************************************* //
(0194) // *** Display a string at the specified row and column, using RAM *** //
(0195) // ******************************************************************* //
(0196) void LCD_DisplayString (char row, char column ,unsigned char *string)
(0197) {
(0198) LCD_Cursor (row, column);
0289 D00B RCALL _LCD_Cursor
028A C004 RJMP 0x028F
(0199) while (*string)
(0200) LCD_DisplayCharacter (*string++);
028B 01FA MOVW R30,R20
028C 9101 LD R16,Z+
028D 01AF MOVW R20,R30
028E DFE0 RCALL _LCD_DisplayCharacter
028F 01FA MOVW R30,R20
0290 8020 LDD R2,Z+0
0291 2022 TST R2
0292 F7C1 BNE 0x028B
(0201) }
0293 D183 RCALL pop_gset3
0294 9508 RET
_LCD_Cursor:
column --> R20
row --> R22
0295 D19A RCALL push_gset2
0296 2F42 MOV R20,R18
0297 2F60 MOV R22,R16
(0202) // *************************************************** //
(0203) // *** Position the LCD cursor at "row", "column". *** //
(0204) // *************************************************** //
(0205) void LCD_Cursor (char row, char column)
(0206) {
(0207) switch (row) {
0298 2777 CLR R23
0299 3061 CPI R22,1
029A E0E0 LDI R30,0
029B 077E CPC R23,R30
029C F069 BEQ 0x02AA
029D 3062 CPI R22,2
029E E0E0 LDI R30,0
029F 077E CPC R23,R30
02A0 F071 BEQ 0x02AF
02A1 3063 CPI R22,3
02A2 E0E0 LDI R30,0
02A3 077E CPC R23,R30
02A4 F079 BEQ 0x02B4
02A5 3064 CPI R22,4
02A6 E0E0 LDI R30,0
02A7 077E CPC R23,R30
02A8 F081 BEQ 0x02B9
02A9 C013 RJMP 0x02BD
(0208) case 1: LCD_WriteControl (0x80 + column - 1); break;
02AA 2F04 MOV R16,R20
02AB 5800 SUBI R16,0x80
02AC 5001 SUBI R16,1
02AD DF92 RCALL _LCD_WriteControl
02AE C00E RJMP 0x02BD
(0209) case 2: LCD_WriteControl (0xc0 + column - 1); break;
02AF 2F04 MOV R16,R20
02B0 5400 SUBI R16,0x40
02B1 5001 SUBI R16,1
02B2 DF8D RCALL _LCD_WriteControl
02B3 C009 RJMP 0x02BD
(0210) case 3: LCD_WriteControl (0x94 + column - 1); break;
02B4 2F04 MOV R16,R20
02B5 560C SUBI R16,0x6C
02B6 5001 SUBI R16,1
02B7 DF88 RCALL _LCD_WriteControl
02B8 C004 RJMP 0x02BD
(0211) case 4: LCD_WriteControl (0xd4 + column - 1); break;
02B9 2F04 MOV R16,R20
02BA 520C SUBI R16,0x2C
02BB 5001 SUBI R16,1
02BC DF83 RCALL _LCD_WriteControl
(0212) default: break;
(0213) }
(0214) }
02BD D157 RCALL pop_gset2
02BE 9508 RET
(0215) // ************************** //
(0216) // *** Turn the cursor on *** //
(0217) // ************************** //
(0218) void LCD_Cursor_On (void)
(0219) {
(0220) LCD_WriteControl (LCD_CURS_ON);
_LCD_Cursor_On:
02BF E00D LDI R16,0xD
(0221) }
02C0 CF7F RJMP _LCD_WriteControl
(0222) // *************************** //
(0223) // *** Turn the cursor off *** //
(0224) // *************************** //
(0225) void LCD_Cursor_Off (void)
(0226) {
(0227) LCD_WriteControl (LCD_ON);
_LCD_Cursor_Off:
02C1 E00C LDI R16,0xC
(0228) }
02C2 CF7D RJMP _LCD_WriteControl
(0229) // ******************** //
(0230) // *** Turn Off LCD *** //
(0231) // ******************** //
(0232) void LCD_Display_Off (void)
(0233) {
(0234) LCD_WriteControl(LCD_OFF);
_LCD_Display_Off:
02C3 E008 LDI R16,0x8
(0235) }
02C4 CF7B RJMP _LCD_WriteControl
(0236) // ******************* //
(0237) // *** Turn On LCD *** //
(0238) // ******************* //
(0239) void LCD_Display_On (void)
(0240) {
(0241) LCD_WriteControl(LCD_ON);
_LCD_Display_On:
02C5 E00C LDI R16,0xC
(0242) }
02C6 CF79 RJMP _LCD_WriteControl
_ClearLine:
space --> R22
line --> R20
02C7 D168 RCALL push_gset2
02C8 2F40 MOV R20,R16
02C9 9722 SBIW R28,2
(0243) // ******************* //
(0244) // *** Clear line *** //
(0245) // ******************* //
(0246) void ClearLine(unsigned char line)
(0247) {
(0248) unsigned char *space=" ";
02CA E862 LDI R22,0x82
02CB E070 LDI R23,0
(0249) LCD_DisplayString(line,1,space);
02CC 8379 STD Y+1,R23
02CD 8368 STD Y+0,R22
02CE E021 LDI R18,1
02CF 2F04 MOV R16,R20
02D0 DFB5 RCALL _LCD_DisplayString
(0250) }
02D1 9622 ADIW R28,2
02D2 D142 RCALL pop_gset2
02D3 9508 RET
FILE: D:\NEW\ECHO\main.c
(0001) #define MAIN_C
(0002) #include "includes.h"
(0003) //ICC-AVR application builder : 2007-1-22 9:46:41
(0004) // Target : M16
(0005) // Crystal: 4.0000Mhz
(0006) void port_init(void)
(0007) {
(0008) PORTA = 0xFF;
_port_init:
02D4 EF8F LDI R24,0xFF
02D5 BB8B OUT 0x1B,R24
(0009) DDRA = 0x00;
02D6 2422 CLR R2
02D7 BA2A OUT 0x1A,R2
(0010) PORTB = 0xfe;// SEND ECHO
02D8 EF8E LDI R24,0xFE
02D9 BB88 OUT 0x18,R24
(0011) DDRB = 0x01;
02DA E081 LDI R24,1
02DB BB87 OUT 0x17,R24
(0012) PORTC = 0xff; //m103 output only
02DC EF8F LDI R24,0xFF
02DD BB85 OUT 0x15,R24
(0013) DDRC = 0x00;
02DE BA24 OUT 0x14,R2
(0014) PORTD = 0xFF;
02DF BB82 OUT 0x12,R24
(0015) DDRD = 0x00;
02E0 BA21 OUT 0x11,R2
(0016) }
02E1 9508 RET
(0017)
(0018) //call this routine to initialise all peripherals
(0019) void init_devices(void)
(0020) {
(0021) //stop errant interrupts until set up
(0022) CLI(); //disable all interrupts
_init_devices:
02E2 94F8 BCLR 7
(0023) port_init();
02E3 DFF0 RCALL _port_init
(0024) Init_LCD();
02E4 DF79 RCALL _Init_LCD
(0025) timer1_init();
02E5 DD8E RCALL _timer1_init
(0026) MCUCR = 0x00;
02E6 2422 CLR R2
02E7 BE25 OUT 0x35,R2
(0027) GICR = 0x00;
02E8 BE2B OUT 0x3B,R2
(0028) TIMSK = 0x24; //OVR(0x20)+ICP(0x04) interrupt sources
02E9 E284 LDI R24,0x24
02EA BF89 OUT 0x39,R24
(0029) SEI(); //re-enable interrupts
02EB 9478 BSET 7
(0030) //all peripherals are now initialised
(0031) }
02EC 9508 RET
(0032)
(0033) void display_temprature(void)
(0034) {
(0035) temprature= readTempDS18B20();
_display_temprature:
02ED DECB RCALL _readTempDS18B20
02EE 940E0484 CALL 0x484
(0036)
(0037) temprature_flag=(temprature>>8)&0xf8;//h8bit(5bit)
02F0 01C8 MOVW R24,R16
02F1 2F89 MOV R24,R25
02F2 2799 CLR R25
02F3 7F88 ANDI R24,0xF8
02F4 7090 ANDI R25,0
02F5 938000BB STS _temprature_flag,R24
(0038)
(0039) if(temprature_flag==0) //signed temprature
02F7 2388 TST R24
02F8 F499 BNE 0x030C
(0040) {
(0041) temprature/=8;
02F9 0118 MOVW R2,R16
02FA 940E0476 CALL 0x476
(0042) temprature*=5;
02FC D108 RCALL empy16s
02FD 940E0484 CALL 0x484
(0043) LCD_Cursor(1,8);
02FF E028 LDI R18,0x8
0300 E001 LDI R16,1
0301 DF93 RCALL _LCD_Cursor
(0044) LCD_DisplayCharacter('+');
0302 E20B LDI R16,0x2B
0303 DF6B RCALL _LCD_DisplayCharacter
0304 940E04B3 CALL 0x4B3
(0045) speed=3314+temprature*6; //set speed for echo
0306 D0FE RCALL empy16s
0307 01C8 MOVW R24,R16
0308 508E SUBI R24,0xE
0309 4F93 SBCI R25,0xF3
030A 940E04D0 CALL 0x4D0
(0046) }
(0047)
(0048) if(temprature_flag!=0)
030C 902000BB LDS R2,_temprature_flag
030E 2022 TST R2
030F F101 BEQ 0x0330
(0049) {
(0050) temprature=~temprature+1;
0310 918000BC LDS R24,_temprature
0312 919000BD LDS R25,_temprature+1
0314 9580 COM R24
0315 9590 COM R25
0316 9601 ADIW R24,1
0317 940E04CB CALL 0x4CB
(0051) temprature&=~0xf800;
0319 7097 ANDI R25,7
031A 940E04CB CALL 0x4CB
(0052) temprature/=8;
031C 011C MOVW R2,R24
031D 940E0476 CALL 0x476
(0053) temprature*=5;
031F D0E5 RCALL empy16s
0320 940E0484 CALL 0x484
(0054) LCD_Cursor(1,8);
0322 E028 LDI R18,0x8
0323 E001 LDI R16,1
0324 DF70 RCALL _LCD_Cursor
(0055) LCD_DisplayCharacter('-');
0325 E20D LDI R16,0x2D
0326 DF48 RCALL _LCD_DisplayCharacter
0327 940E04B3 CALL 0x4B3
(0056) speed=3314-temprature*6; //set speed for echo
0329 D0DB RCALL empy16s
032A EF82 LDI R24,0xF2
032B E09C LDI R25,0xC
032C 1B80 SUB R24,R16
032D 0B91 SBC R25,R17
032E 940E04D0 CALL 0x4D0
(0057) }
(0058)
(0059) //temprature=speed;//testing!!!!!!!!!!!!!!!!!!!!!!!!
(0060)
(0061) ASCII_T[0]='0'+temprature/1000;
0330 EE28 LDI R18,0xE8
0331 E033 LDI R19,3
0332 940E0493 CALL 0x493
0334 D0B6 RCALL div16u
0335 01C8 MOVW R24,R16
0336 96C0 ADIW R24,0x30
0337 93800097 STS 0x97,R24
(0062) temprature%=1000;
0339 EE28 LDI R18,0xE8
033A E033 LDI R19,3
033B 940E0493 CALL 0x493
033D D0AB RCALL mod16u
033E 940E0484 CALL 0x484
(0063) ASCII_T[1]='0'+temprature/100;
0340 E624 LDI R18,0x64
0341 E030 LDI R19,0
0342 D0A8 RCALL div16u
0343 01C8 MOVW R24,R16
0344 96C0 ADIW R24,0x30
0345 93800098 STS 0x98,R24
(0064) temprature%=100;
0347 E624 LDI R18,0x64
0348 E030 LDI R19,0
0349 940E0493 CALL 0x493
034B D09D RCALL mod16u
034C 940E0484 CALL 0x484
(0065) ASCII_T[2]='0'+temprature/10;
034E E02A LDI R18,0xA
034F E030 LDI R19,0
0350 D09A RCALL div16u
0351 01C8 MOVW R24,R16
0352 96C0 ADIW R24,0x30
0353 93800099 STS 0x99,R24
(0066) temprature%=10;
0355 E02A LDI R18,0xA
0356 E030 LDI R19,0
0357 940E0493 CALL 0x493
0359 D08F RCALL mod16u
035A 940E0484 CALL 0x484
(0067) ASCII_T[3]='0'+temprature;
035C 01C8 MOVW R24,R16
035D 96C0 ADIW R24,0x30
035E 9380009A STS 0x9A,R24
(0068) LCD_Cursor(1,9);
0360 E029 LDI R18,0x9
0361 E001 LDI R16,1
0362 DF32 RCALL _LCD_Cursor
(0069) LCD_DisplayCharacter(ASCII_T[0]); //100BIT
0363 91000097 LDS R16,0x97
0365 DF09 RCALL _LCD_DisplayCharacter
(0070) LCD_Cursor(1,10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -