📄 mega16pro.lst
字号:
Interrupt Vectors
00000 940C 02F7 JMP __start|__text_start
Program Code (text area)
__start|__text_start:
002F7 EFCF LDI R28,0xFF
002F8 E2D1 LDI R29,0x21
002F9 BFCD OUT 0x3D,R28
002FA BFDE OUT 0x3E,R29
002FB 51CE SUBI R28,0x1E
002FC 40D0 SBCI R29,0
002FD EA0A LDI R16,0xAA
002FE 8308 ST Y,R16
002FF 2400 CLR R0
00300 EFEC LDI R30,0xFC
00301 E0F6 LDI R31,6
00302 E018 LDI R17,0x8
00303 32E8 CPI R30,0x28
00304 07F1 CPC R31,R17
00305 F011 BEQ 0x0308
00306 9201 ST Z+,R0
00307 CFFB RJMP 0x0303
00308 8300 ST Z,R16
00309 EFE2 LDI R30,0xF2
0030A E0F0 LDI R31,0
0030B E0A0 LDI R26,0
0030C E0B2 LDI R27,2
0030D E015 LDI R17,5
0030E E000 LDI R16,0
0030F BF0B OUT 0x3B,R16
00310 3EEE CPI R30,0xEE
00311 07F1 CPC R31,R17
00312 F021 BEQ 0x0317
00313 95C8 LPM
00314 9631 ADIW R30,1
00315 920D ST X+,R0
00316 CFF9 RJMP 0x0310
00317 940E 037E CALL _main
_exit:
00319 CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\MEGA16\source\bms\main.c
(0001) #include "..\source\CPU_source\includes.h"
(0002)
(0003) void StartTask(void *pdata);
(0004) OS_STK StartTaskStack[OS_TASK_START_STK_SIZE]={0};
(0005) /*
(0006) ******************************************************************************
(0007) * Timer0 overflow 用于系统时钟节拍
(0008) *****************************************************************************
(0009) */
(0010) void OSTick_Init (void){
(0011) OS_ENTER_CRITICAL();
_OSTick_Init:
0031A 930A ST -Y,R16
0031B B70F IN R16,0x3F
0031C 94F8 BCLR 7
0031D 930F PUSH R16
0031E 9109 LD R16,Y+
(0012) //WDTCR=(1<<WDTOE)|(1<<WDE);
(0013) //WDTCR=(1<<WDE); //17ms看门狗
(0014)
(0015) TIMSK &= ~(BIT(TOIE0) /* | BIT(OCIE0) */); /*disable TC0 interrupts */
0031F B789 IN R24,0x39
00320 7F8E ANDI R24,0xFE
00321 BF89 OUT 0x39,R24
(0016) TCCR0 = 0x02; /* /8 */
00322 E082 LDI R24,2
00323 BF83 OUT 0x33,R24
(0017) TCNT0 = 0x05; /* Counter overflow initial , 0.5ms @ 4MHz */
00324 E085 LDI R24,5
00325 BF82 OUT 0x32,R24
(0018) TIMSK |= BIT(TOIE0); /* enable OVF-interrupt */
00326 B789 IN R24,0x39
00327 6081 ORI R24,1
00328 BF89 OUT 0x39,R24
(0019) OS_EXIT_CRITICAL(); // enable global interrupt
00329 930A ST -Y,R16
0032A 910F POP R16
0032B BF0F OUT 0x3F,R16
0032C 9109 LD R16,Y+
0032D 9508 RET
_UartInit:
temp --> R10
divisor --> R10
baud_rate --> Y,+6
0032E 940E 0E2A CALL push_arg4
00330 940E 0F05 CALL push_xgsetF00C
(0020) }
(0021) //串口的初始化
(0022) void UartInit(INT32U baud_rate)
(0023) {
(0024) INT16U divisor;
(0025) INT16U temp; /* -------- INITIALIZE THE SERIAL PORT ---------- */
(0026) temp = (CPU_CLK_FREQ * 2) / (16 * baud_rate);
00332 802E LDD R2,Y+6
00333 803F LDD R3,Y+7
00334 8448 LDD R4,Y+8
00335 8459 LDD R5,Y+9
00336 E140 LDI R20,0x10
00337 E050 LDI R21,0
00338 E060 LDI R22,0
00339 E070 LDI R23,0
0033A 925A ST -Y,R5
0033B 924A ST -Y,R4
0033C 923A ST -Y,R3
0033D 922A ST -Y,R2
0033E 018A MOVW R16,R20
0033F 019B MOVW R18,R22
00340 940E 0E99 CALL empy32u|empy32s
00342 E040 LDI R20,0
00343 E152 LDI R21,0x12
00344 E76A LDI R22,0x7A
00345 E070 LDI R23,0
00346 933A ST -Y,R19
00347 932A ST -Y,R18
00348 931A ST -Y,R17
00349 930A ST -Y,R16
0034A 018A MOVW R16,R20
0034B 019B MOVW R18,R22
0034C 940E 0E2F CALL div32u
0034E 0158 MOVW R10,R16
(0027) divisor = (temp + 1) / 2 - 1; /* Compute baud rate divisor and round off */
0034F 01C5 MOVW R24,R10
00350 9601 ADIW R24,1
00351 9596 LSR R25
00352 9587 ROR R24
00353 9701 SBIW R24,1
00354 015C MOVW R10,R24
(0028)
(0029) UCSRB = 0x00; //disable while setting baud rate
00355 2422 CLR R2
00356 B82A OUT 0x0A,R2
(0030) UCSRA = 0x00;
00357 B82B OUT 0x0B,R2
(0031) UCSRC = 0x06;
00358 E086 LDI R24,6
00359 BD80 OUT 0x20,R24
(0032) UBRRL = divisor & 0x00FF; //set baud rate lo 19.2k
0035A 01C5 MOVW R24,R10
0035B 7090 ANDI R25,0
0035C B989 OUT 0x09,R24
(0033) UBRRH = divisor >> 8;; //set baud rate hi
0035D 0115 MOVW R2,R10
0035E 2C23 MOV R2,R3
0035F 2433 CLR R3
00360 BC20 OUT 0x20,R2
(0034) UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
00361 E988 LDI R24,0x98
00362 B98A OUT 0x0A,R24
00363 940E 0F0C CALL pop_xgsetF00C
00365 9624 ADIW R28,4
00366 9508 RET
(0035) // Uart0RingBuf.RxIndex=0;
(0036)
(0037) }
(0038)
(0039) void System_Init(void)
(0040) {
(0041) //端口的初始化
(0042) PORTA = 0x00; //output
_System_Init:
00367 2422 CLR R2
00368 BA2B OUT 0x1B,R2
(0043) DDRA = 0xff;
00369 EF8F LDI R24,0xFF
0036A BB8A OUT 0x1A,R24
(0044)
(0045) PORTB = 0xFF; //output
0036B BB88 OUT 0x18,R24
(0046) DDRB = 0xFF;
0036C BB87 OUT 0x17,R24
(0047)
(0048) PORTC = 0x00; // output only
0036D BA25 OUT 0x15,R2
(0049) DDRC = 0xFF;
0036E BB84 OUT 0x14,R24
(0050)
(0051) PORTD = 0X00; //串口
0036F BA22 OUT 0x12,R2
(0052) DDRD = 0X02;
00370 E082 LDI R24,2
00371 BB81 OUT 0x11,R24
(0053)
(0054) //串口的初始化
(0055) UartInit(9600);
00372 E800 LDI R16,0x80
00373 E215 LDI R17,0x25
00374 E020 LDI R18,0
00375 E030 LDI R19,0
00376 DFB7 RCALL _UartInit
(0056) //ad采集的初始化
(0057)
(0058) /*蜂鸣器*/
(0059) PORTA&=~(1<<PA6);
00377 98DE CBI 0x1B,6
(0060) delay_nms(100);
00378 E604 LDI R16,0x64
00379 E010 LDI R17,0
0037A 940E 0D2B CALL _delay_nms
(0061) PORTA|=(1<<PA6); //PB2控制蜂鸣器
0037C 9ADE SBI 0x1B,6
0037D 9508 RET
_main:
0037E 9723 SBIW R28,3
(0062)
(0063) }
(0064) // Start
(0065) void main(void)
(0066) {
(0067) System_Init();
0037F DFE7 RCALL _System_Init
(0068)
(0069) OSTaskStkSize = OS_TASK_IDLE_STK_SIZE; /* Setup the default stack size */
00380 E684 LDI R24,0x64
00381 E090 LDI R25,0
00382 9390 06FF STS OSTaskStkSize+1,R25
00384 9380 06FE STS OSTaskStkSize,R24
(0070) OSTaskStkSizeHard = OS_TASK_IDLE_STK_SIZE_HARD; /* Setup the default hardware stack size */
00386 E184 LDI R24,0x14
00387 9390 06FD STS OSTaskStkSizeHard+1,R25
00389 9380 06FC STS OSTaskStkSizeHard,R24
(0071) OSInit(); // OS init
0038B 940E 05C1 CALL _OSInit
(0072)
(0073) OSTaskStkSize = OS_TASK_START_STK_SIZE; /* Setup the total stack size */
0038D EA8A LDI R24,0xAA
0038E E090 LDI R25,0
0038F 9390 06FF STS OSTaskStkSize+1,R25
00391 9380 06FE STS OSTaskStkSize,R24
(0074) OSTaskStkSizeHard = OS_TASK_START_STK_SIZE_HARD; /* Setup the hardware stack size */
00393 E280 LDI R24,0x20
00394 9390 06FD STS OSTaskStkSizeHard+1,R25
00396 9380 06FC STS OSTaskStkSizeHard,R24
(0075) OSTaskCreate( StartTask,
00398 E081 LDI R24,1
00399 838A STD Y+2,R24
0039A E080 LDI R24,0
0039B E092 LDI R25,2
0039C 91E0 06FE LDS R30,OSTaskStkSize
0039E 91F0 06FF LDS R31,OSTaskStkSize+1
003A0 9731 SBIW R30,1
003A1 0FE8 ADD R30,R24
003A2 1FF9 ADC R31,R25
003A3 83F9 STD Y+1,R31
003A4 83E8 ST Y,R30
003A5 2722 CLR R18
003A6 2733 CLR R19
003A7 EE04 LDI R16,0xE4
003A8 E010 LDI R17,0
003A9 940E 0A9E CALL _OSTaskCreate
(0076) (void *)0,
(0077) (OS_STK *)&StartTaskStack[OSTaskStkSize - 1],
(0078) OS_TASK_START_PRIO);
(0079)
(0080) OSStart();
003AB 940E 0625 CALL _OSStart
003AD 9623 ADIW R28,3
003AE 9508 RET
FILE: C:\DOCUME~1\Administrator\桌面\MEGA16\source\CPU_source\os_cpu_c.c
(0001) /*
(0002) ********************************************************************************
(0003) * uC/OS-II
(0004) * The Real-Time Kernel
(0005) *
(0006) * ATmega103 Specific code
(0007) *
(0008) * File: OS_CPU_C.C
(0009) * By: Ole Saether
(0010) * Modified by: Joerg Meyer
(0011) * Revision: 0
(0012) *
(0013) *
(0014) *
(0015) ********************************************************************************
(0016) */
(0017)
(0018) #define OS_CPU_GLOBALS
(0019) #include "..\source\CPU_source\includes.h"
(0020)
(0021)
(0022) /*
(0023) *********************************************************************************************************
(0024) * LOCAL GLOBAL VARIABLES
(0025) *********************************************************************************************************
(0026) */
(0027)
(0028) #if OS_VERSION >= 281 && OS_TMR_EN > 0
(0029) static INT16U OSTmrCtr;
(0030) #endif
(0031)
(0032) /*
(0033) *********************************************************************************************************
(0034) * OS INITIALIZATION HOOK
(0035) * (BEGINNING)
(0036) *
(0037) * Description: This function is called by OSInit() at the beginning of OSInit().
(0038) *
(0039) * Arguments : none
(0040) *
(0041) * Note(s) : 1) Interrupts should be disabled during this call.
(0042) *********************************************************************************************************
(0043) */
(0044) #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
(0045) void OSInitHookBegin (void)
(0046) {
_OSInitHookBegin:
003AF 9508 RET
(0047) #if OS_VERSION >= 281 && OS_TMR_EN > 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -