Вообще-то, примеры примеры были сделаны для вашего контроллера. Исходный код#include <ioCY7C68013A.h>
#include <intrinsics.h>
typedef unsigned int uint16_t;
typedef signed int int16_t;
volatile char Flags;
#pragma vector = USB_int
__interrupt void USB_Handler(void)
{
Flags = 0;
}
#pragma vector = TF0_int
__interrupt void Tim0_Handler(void)
{
Flags = 1;
}
void delay(uint16_t n)
{
for (uint16_t i=0; i < n; i++)
__no_operation();
}
void main(void)
{
for (;;)
{
delay(1000U);
delay(10000U);
}
}
Сгенерированный код
F:\MCS51prj\Test\test.c
1 #include <ioCY7C68013A.h>
2 #include <intrinsics.h>
3
4 typedef unsigned int uint16_t;
5 typedef signed int int16_t;
6
\ In segment IDATA_Z, align 1, keep-with-next
7 volatile char Flags;
\ Flags:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_IDATA_Z
8
9 #pragma vector = USB_int
\ In segment NEAR_CODE, align 1, keep-with-next
10 __interrupt void USB_Handler(void)
\ USB_Handler:
11 {
\ 000000 C0E0 PUSH A
\ 000002 E8 MOV A,R0
\ 000003 ; Saved register size: 4
\ 000003 ; Auto size: 0
12 Flags = 0;
\ 000003 78.. MOV R0,#Flags
\ 000005 7600 MOV @R0,#0x0
13 }
\ 000007 F8 MOV R0,A
\ 000008 D0E0 POP A
\ 00000A 32 RETI
14
15 #pragma vector = TF0_int
\ In segment NEAR_CODE, align 1, keep-with-next
16 __interrupt void Tim0_Handler(void)
\ Tim0_Handler:
17 {
\ 000000 C0E0 PUSH A
\ 000002 E8 MOV A,R0
\ 000003 ; Saved register size: 4
\ 000003 ; Auto size: 0
18 Flags = 1;
\ 000003 78.. MOV R0,#Flags
\ 000005 7601 MOV @R0,#0x1
19 }
\ 000007 F8 MOV R0,A
\ 000008 D0E0 POP A
\ 00000A 32 RETI
\ In segment NEAR_CODE, align 1, keep-with-next
20 void delay(uint16_t n)
\ delay:
21 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
22 for (uint16_t i=0; i < n; i++)
\ 000000 EA MOV A,R2
\ 000001 4B ORL A,R3
\ 000002 6011 JZ ??delay_0
\ 000004 EA MOV A,R2
\ 000005 F8 MOV R0,A
\ 000006 EB MOV A,R3
\ 000007 F9 MOV R1,A
23 __no_operation();
\ ??delay_1:
\ 000008 00 NOP
\ 000009 E8 MOV A,R0
\ 00000A 24FF ADD A,#-0x1
\ 00000C 18 DEC R0
\ 00000D E9 MOV A,R1
\ 00000E 34FF ADDC A,#-0x1
\ 000010 F9 MOV R1,A
\ 000011 E8 MOV A,R0
\ 000012 49 ORL A,R1
\ 000013 70F3 JNZ ??delay_1
24 }
\ ??delay_0:
\ 000015 53..FE ANL ?DPS,#0xfe
\ 000018 22 RET
25
\ In segment NEAR_CODE, align 1, keep-with-next
26 void main(void)
\ main:
27 {
\ 000000 ; Auto size: 0
28 for (;;)
29 {
30 delay(1000U);
\ ??main_0:
\ 000000 ; Setup parameters for call to function delay
\ 000000 7AE8 MOV R2,#-0x18
\ 000002 7B03 MOV R3,#0x3
\ 000004 12.... LCALL delay
31 delay(10000U);
\ 000007 ; Setup parameters for call to function delay
\ 000007 7A10 MOV R2,#0x10
\ 000009 7B27 MOV R3,#0x27
\ 00000B 12.... LCALL delay
\ 00000E 80F0 SJMP ??main_0
32 }
33 }
\ In segment INTVEC, offset 0xb, root
\ `??Tim0_Handler::??INTVEC 11`:
\ 00000B 02.... LJMP (Tim0_Handler)
\ In segment INTVEC, offset 0x43, root
\ `??USB_Handler::??INTVEC 67`:
\ 000043 02.... LJMP (USB_Handler)
Maximum stack usage in bytes:
ISTACK Function
------ --------
4 Tim0_Handler
4 USB_Handler
0 delay
0 main
0 -> delay
Segment part sizes:
Bytes Function/Label
----- --------------
1 Flags
11 Tim0_Handler
3 Tim0_Handler::??INTVEC 11
11 USB_Handler
3 USB_Handler::??INTVEC 67
25 delay
16 main
1 byte in segment IDATA_Z
6 bytes in segment INTVEC
63 bytes in segment NEAR_CODE
63 bytes of CODE memory (+ 6 bytes shared)
1 byte of IDATA memory
Errors: none
Warnings: none
Карта памяти
################################################################################ # # # IAR Universal Linker V6.4.2.83 # # # # Link time = 03/Jul/2018 13:13:31 # # Target CPU = x51 # # List file = F:\MCS51prj\Test\Release\List\test.map # # Output file 1 = F:\MCS51prj\Test\Release\Exe\test.a51 # # Format: intel-standard # # Command line = "-IC:\Program Files\IAR Systems\Embedded Workbenc # # h 7.3\8051\CONFIG\" # # -D_NR_OF_BANKS=0 -D_CODEBANK_END=0 # # -D_CODEBANK_START=0 # # F:\MCS51prj\Test\Release\Obj\test.r51 -o # # F:\MCS51prj\Test\Release\Exe\test.a51 # # -Fintel-standard -l # # F:\MCS51prj\Test\Release\List\test.map -xms # # "-IC:\Program Files\IAR Systems\Embedded Workbenc # # h 7.3\8051\LIB\" # # -f # # "C:\Program Files\IAR Systems\Embedded Workbench # # 7.3\8051\config\devices\Cypress\lnk51ew_CY7C68013 # # A.xcl" # # (-D_IDATA0_START=0x00 -D_IDATA0_END=0xFF # # -D_PDATA0_START=0x0000 -D_PDATA0_END=0x00FF # # -D_IXDATA0_START=0xE000 -D_IXDATA0_END=0xE1FF # # -D_XDATA0_START=0xE000 -D_XDATA0_END=0xE1FF # # -D_CODE0_START=0x000000 -D_CODE0_END=0x3FFF # # -D?REGISTER_BANK=0x0 -D_REGISTER_BANK_START=0x0 # # -D_BREG_START=0x00 -D?VB=0x20 # # -Z(BIT)BREG=_BREG_START -Z(BIT)BIT_N=0-7F # # -Z(DATA)REGISTERS+8=_REGISTER_BANK_START # # -Z(DATA)BDATA_Z,BDATA_N,BDATA_I=20-2F # # -Z(DATA)VREG=08-7F -Z(DATA)PSP,XSP=08-7F # # -Z(DATA)DOVERLAY=08-7F # # -Z(DATA)DATA_I,DATA_Z,DATA_N=08-7F # # -U(IDATA)0-7F=(DATA)0-7F # # -Z(IDATA)IDATA_I,IDATA_Z,IDATA_N=08-_IDATA0_END # # -Z(IDATA)ISTACK+_IDATA_STACK_SIZE#08-_IDATA0_END # # -Z(IDATA)IOVERLAY=08-FF -Z(CODE)INTVEC=0 # # -Z(CODE)CSTART=_CODE0_START-_CODE0_END # # -Z(CODE)BIT_ID,BDATA_ID,DATA_ID,IDATA_ID,IXDATA_I # # D,PDATA_ID,XDATA_ID=_CODE0_START-_CODE0_END # # -Z(CODE)HUGE_ID=_CODE0_START-_CODE0_END # # -Z(CODE)RCODE,DIFUNCT=_CODE0_START-_CODE0_END # # -P(CODE)CODE_C,CODE_N,NEAR_CODE=_CODE0_START-_COD # # E0_END # # -Z(CODE)CHECKSUM#_CODE0_END # # -Z(XDATA)PDATA_Z,PDATA_I=_PDATA0_START-_PDATA0_EN # # D # # -P(XDATA)PDATA_N=_PDATA0_START-_PDATA0_END # # -Z(XDATA)PSTACK+_PDATA_STACK_SIZE=_PDATA0_START-_ # # PDATA0_END # # -Z(XDATA)EXT_STACK+_EXTENDED_STACK_SIZE=_EXTENDED # # _STACK_START # # -Z(XDATA)XSTACK+_XDATA_STACK_SIZE=_XDATA0_START-_ # # XDATA0_END # # -Z(XDATA)IXDATA_I,IXDATA_Z=_IXDATA0_START-_IXDATA # # 0_END # # -P(XDATA)IXDATA_N=_IXDATA0_START-_IXDATA0_END # # -Z(XDATA)XDATA_I,XDATA_Z=_XDATA0_START-_XDATA0_EN # # D # # -P(XDATA)XDATA_N=_XDATA0_START-_XDATA0_END # # -Z(XDATA)XDATA_HEAP+_XDATA_HEAP_SIZE=_XDATA0_STAR # # T-_XDATA0_END # # -Z(CONST)XDATA_ROM_C=_XDATA0_START-_XDATA0_END # # -Z(CODE)FAR22_ID=[_CODE0_START-_CODE0_END]/10000 # # -Z(CODE)FAR_ID=[_CODE0_START-_CODE0_END]/10000 # # -cx51) -D?DPMASK=0x01 # # -D_NR_OF_VIRTUAL_REGISTERS=8 -D?DPS=0x86 # # -D?PBANK=0x92 -D?DPL1=0x84 -D?DPH1=0x85 -s # # __program_start # # "C:\Program Files\IAR Systems\Embedded Workbench # # 7.3\8051\LIB\CLIB\cl-pli-nsid-2e16inc.r51" # # -D_IDATA_STACK_SIZE=0x40 -D?ESP=0 -D?ESP_MASK=0 # # -D_EXTENDED_STACK_START=0 # # -D_EXTENDED_STACK_SIZE=0 # # -D_PDATA_STACK_SIZE=0x80 # # -D_XDATA_STACK_SIZE=0xEFF # # -D_XDATA_HEAP_SIZE=0xFF -D_FAR_HEAP_SIZE=0xFFF # # -D_HUGE_HEAP_SIZE=0xFFF # # -D_FAR22_HEAP_SIZE=0xFFF # # # # Copyright (C) 1987-2015 IAR Systems AB. # ################################################################################ **************************************** * * * CROSS REFERENCE * * * **************************************** Program entry at : CODE 0000005F Relocatable, from module : CSTARTUP **************************************** * * * RUNTIME MODEL * * * **************************************** __SystemLibrary = CLib __calling_convention = idata_reentrant __code_model = near __core = plain __data_model = small __dptr_size = 16 __dptr_visibility = separate __extended_stack = disabled __location_for_constants = data __number_of_dptrs = 2 __rt_version = 1 **************************************** * * * AUTOMATIC SYMBOL REDIRECTIONS * * * **************************************** There are no automatic symbol redirections. **************************************** * * * MODULE MAP * * * **************************************** DEFINED ABSOLUTE ENTRIES ************************************************************************* DEFINED ABSOLUTE ENTRIES PROGRAM MODULE, NAME : ?ABS_ENTRY_MOD Absolute parts ENTRY ADDRESS REF BY ===== ======= ====== _FAR22_HEAP_SIZE 00000FFF _HUGE_HEAP_SIZE 00000FFF _FAR_HEAP_SIZE 00000FFF _XDATA_HEAP_SIZE 000000FF _XDATA_STACK_SIZE 00000EFF _PDATA_STACK_SIZE 00000080 _EXTENDED_STACK_SIZE 00000000 _EXTENDED_STACK_START 00000000 ?ESP_MASK 00000000 ?ESP 00000000 _IDATA_STACK_SIZE 00000040 ?DPH1 00000085 ?DPL1 00000084 ?PBANK 00000092 ?DPS 00000086 ?RESET_DPS (CSTARTUP) delay (test) _NR_OF_VIRTUAL_REGISTERS 00000008 ?DPMASK 00000001 ?RESET_DPS (CSTARTUP) ?VB 00000020 _BREG_START 00000000 _REGISTER_BANK_START 00000000 ?REGISTER_BANK 00000000 Segment part 6 (CSTARTUP) _CODE0_END 00003FFF _CODE0_START 00000000 _XDATA0_END 0000E1FF _XDATA0_START 0000E000 _IXDATA0_END 0000E1FF _IXDATA0_START 0000E000 _PDATA0_END 000000FF _PDATA0_START 00000000 _IDATA0_END 000000FF _IDATA0_START 00000000 _CODEBANK_START 00000000 _CODEBANK_END 00000000 _NR_OF_BANKS 00000000 ************************************************************************* FILE NAME : F:\MCS51prj\Test\Release\Obj\test.r51 PROGRAM MODULE, NAME : test SEGMENTS IN THE MODULE ====================== IDATA_Z Relative segment, address: IDATA 00000008 - 00000008 (0x1 bytes), align: 0 Segment part 8. Intra module refs: Tim0_Handler USB_Handler ENTRY ADDRESS REF BY ===== ======= ====== Flags 00000008 ------------------------------------------------------------------------- <NEAR_CODE> 1 (was NEAR_CODE) Relative segment, address: CODE 0000006B - 00000075 (0xb bytes), align: 0 Segment part 9. Intra module refs: USB_Handler::??INTVEC 67 ENTRY ADDRESS REF BY ===== ======= ====== USB_Handler 0000006B interrupt function ISTACK = 00000000 ( 00000004 ) ------------------------------------------------------------------------- <NEAR_CODE> 1 (was NEAR_CODE) Relative segment, address: CODE 00000076 - 00000080 (0xb bytes), align: 0 Segment part 10. Intra module refs: Tim0_Handler::??INTVEC 11 ENTRY ADDRESS REF BY ===== ======= ====== Tim0_Handler 00000076 interrupt function ISTACK = 00000000 ( 00000004 ) ------------------------------------------------------------------------- <NEAR_CODE> 1 (was NEAR_CODE) Relative segment, address: CODE 00000081 - 00000099 (0x19 bytes), align: 0 Segment part 11. Intra module refs: main ENTRY ADDRESS REF BY ===== ======= ====== delay 00000081 ------------------------------------------------------------------------- <NEAR_CODE> 1 (was NEAR_CODE) Relative segment, address: CODE 0000009A - 000000A9 (0x10 bytes), align: 0 Segment part 12. ENTRY ADDRESS REF BY ===== ======= ====== main 0000009A ?call_main (?cmain) calls direct ------------------------------------------------------------------------- INTVEC Common segment, address: CODE 00000000 - 0000000D (0xe bytes), align: 0 Segment part 1. ROOT ENTRY ADDRESS REF BY ===== ======= ====== Tim0_Handler::??INTVEC 11 0000000B ------------------------------------------------------------------------- INTVEC Common segment, address: CODE 00000000 - 00000045 (0x46 bytes), align: 0 Segment part 2. ROOT ENTRY ADDRESS REF BY ===== ======= ====== USB_Handler::??INTVEC 67 00000043 ************************************************************************* FILE NAME : C:\Program Files\IAR Systems\Embedded Workbench 7.3\8051\LIB\CLIB\cl-pli-nsid-2e16inc.r51 LIBRARY MODULE, NAME : ?cexit SEGMENTS IN THE MODULE ====================== CSTART Relative segment, address: CODE 00000046 - 0000004A (0x5 bytes), align: 0 Segment part 0. ENTRY ADDRESS REF BY ===== ======= ====== exit 00000046 ?call_main (?cmain) ?C_EXIT 00000046 ?ROM_MONITOR_NOPS 00000046 ------------------------------------------------------------------------- LIBRARY MODULE, NAME : ?cmain SEGMENTS IN THE MODULE ====================== CSTART Relative segment, address: CODE 0000004B, align: 0 Segment part 5. ENTRY ADDRESS REF BY ===== ======= ====== ?cmain 0000004B Segment part 14 (CSTARTUP) calls direct ------------------------------------------------------------------------- CSTART Relative segment, address: CODE 0000004B - 00000058 (0xe bytes), align: 0 Segment part 12. ENTRY ADDRESS REF BY ===== ======= ====== __INIT_IDATA_Z 0000004B Flags (test) ------------------------------------------------------------------------- CSTART Relative segment, address: CODE 00000059 - 0000005E (0x6 bytes), align: 0 Segment part 38. Intra module refs: ?cmain ENTRY ADDRESS REF BY ===== ======= ====== ?call_main 00000059 ------------------------------------------------------------------------- LIBRARY MODULE, NAME : CSTARTUP SEGMENTS IN THE MODULE ====================== REGISTERS Relative segment, address: DATA 00000000, align: 0 Segment part 0. Intra module refs: Segment part 6 ENTRY ADDRESS REF BY ===== ======= ====== ?REGISTERS 00000000 ------------------------------------------------------------------------- ISTACK Relative segment, address: IDATA 000000C0, align: 0 Segment part 1. Intra module refs: Segment part 6 ENTRY ADDRESS REF BY ===== ======= ====== ?ISTACK_START 000000C0 ------------------------------------------------------------------------- INTVEC Common segment, address: CODE 00000000 - 00000002 (0x3 bytes), align: 0 Segment part 5. ROOT Intra module refs: Segment part 6 ------------------------------------------------------------------------- CSTART Relative segment, address: CODE 0000005F - 00000064 (0x6 bytes), align: 0 Segment part 6. ROOT Intra module refs: Segment part 5 ENTRY ADDRESS REF BY ===== ======= ====== __program_start 0000005F Absolute parts (?ABS_ENTRY_MOD) ?RESET_SP 00000062 ------------------------------------------------------------------------- CSTART Relative segment, address: CODE 00000065 - 00000067 (0x3 bytes), align: 0 Segment part 12. Intra module refs: Absolute parts ENTRY ADDRESS REF BY ===== ======= ====== ?RESET_DPS 00000065 ------------------------------------------------------------------------- CSTART Relative segment, address: CODE 00000068 - 0000006A (0x3 bytes), align: 0 Segment part 14. Intra module refs: Absolute parts ------------------------------------------------------------------------- LIBRARY MODULE, NAME : VIRTUAL_REGISTERS SEGMENTS IN THE MODULE ====================== BREG Relative segment, address: BIT 00000020.0 - 00000020.7 (0x8 bits), align: 0 Segment part 0. ENTRY ADDRESS REF BY ===== ======= ====== ?B0 00000020.0 Absolute parts (CSTARTUP) **************************************** * * * SEGMENTS IN ADDRESS ORDER * * * **************************************** SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN ======= ===== ============= =========== ==== ==== ===== INTVEC CODE 00000000 - 00000045 46 com 0 CSTART CODE 00000046 - 0000006A 25 rel 0 <NEAR_CODE> 1 CODE 0000006B - 000000A9 3F rel 0 REGISTERS DATA 00000000 - 00000007 8 rel 0 BREG BIT 00000020.0 - 00000020.7 8 rel 0 IDATA_I IDATA 00000008 dse 0 IDATA_Z IDATA 00000008 - 00000008 1 rel 0 ISTACK IDATA 000000C0 - 000000FF 40 rel 0 **************************************** * * * END OF CROSS REFERENCE * * * **************************************** 170 bytes of CODE memory 8 bytes of DATA memory 65 bytes of IDATA memory 8 bits of BIT memory Errors: none Warnings: none
-
- Во первых ваш пример ничего не делает, поэтому понять работает он или нет на железе нет возможности. Во вторых (читать внутри)... sladkoejka(1324 знак., 03.07.2018 11:45 - 11:51)