c8051f320 keil

c8059f320
flash :16kB   0000H-3FFFH, c代码
在keil中可设置编译地址
比如

之后keil会将代码编译在2a00之后这些地址空间里面,恩,是实际的flash的物理地址,不要认为是虚拟地址
由于复位时,cpu总是从0000开始执行,所以0000处必须有代码,keil帮我们安排了一个跳转代码,不是跳到main,而是跳到
startup处,去执行一些堆栈之类的初始化代码,
    95: ?C_STARTUP:     LJMP    STARTUP1 
    96:  
    97:                 RSEG    ?C_C51STARTUP 
    98:  
    99: STARTUP1: 
C:0x0000    023188   LJMP     STARTUP1(C:3188)
C:0x0003    FF       MOV      R7,A
C:0x0004    FF       MOV      R7,A
C:0x0005    FF       MOV      R7,A
C:0x0006    FF       MOV      R7,A
C:0x0007    FF       MOV      R7,A
C:0x0008    FF       MOV      R7,A
C:0x0009    FF       MOV      R7,A
C:0x000A    FF       MOV      R7,A

                 STARTUP1:
C:0x3188    53A87F   ANL      IE(0xA8),#0x7F

C:0x318B    53D9BF   ANL      PCA0MD(0xD9),#0xBF
C:0x318E    750810   MOV      DataSent(0x08),#0x10
C:0x3191    750900   MOV      0x09,#Setup(0x00)
C:0x3194    75810A   MOV      SP(0x81),#DataSize(0x0A)
C:0x3197    0231D5   LJMP     C:31D5
C:0x319A    022BB7   LJMP     main(C:2BB7)
C:0x319D    E4       CLR      A
C:0x319E    93       MOVC     A,@A+DPTR
//执行完初始化之后跳转到main处

C:0x2BB3    E0       MOVX     A,@DPTR
C:0x2BB4    F597     MOV      USB0DAT(0x97),A
C:0x2BB6    22       RET      
                 main:
C:0x2BB7    E4       CLR      A

C:0x2BB8    9000A4   MOV      DPTR,#0x00A4
C:0x2BBB    F0       MOVX     @DPTR,A
C:0x2BBC    53D9BF   ANL      PCA0MD(0xD9),#0xBF
C:0x2BBF    C2AF     CLR      EA(0xA8.7)
C:0x2BC1    12392C   LCALL    Clock_Init(C:392C)
//main是从2BB7开始的,前面设置的2A00代码段开始处是什么东西呢?

C:0x29FD    FF       MOV      R7,A
C:0x29FE    FF       MOV      R7,A
C:0x29FF    FF       MOV      R7,A
                 Handle_Setup:
C:0x2A00    E596     MOV      A,USB0ADR(0x96)
C:0x2A02    20E7FB   JB       0xE0.7,Handle_Setup(C:2A00)
C:0x2A05    1235A3   LCALL    L?0352(C:35A3)
C:0x2A08    E596     MOV      A,USB0ADR(0x96)
C:0x2A0A    20E7FB   JB       0xE0.7,C:2A08
C:0x2A0D    759691   MOV      USB0ADR(0x96),#TMR3CN(0x91)
C:0x2A10    E596     MOV      A,USB0ADR(0x96)
C:0x2A12    20E7FB   JB       0xE0.7,C:2A10
//是一个自定义的函数,也可看出2a00的flash之前是空白的
用u-ec5的下载工具可以看到


...................................

...............................

整个程序到此结束,
main函数为什么会在2BB7?keil编译时内定的
TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
            -----------------------------------------------------


            * * * * * * *   D A T A   M E M O R Y   * * * * * * *
            REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
            DATA    0008H     0002H     UNIT         ?C?LIB_DATA
            DATA    000AH     0001H     UNIT         _DATA_GROUP_
            IDATA   000BH     0001H     UNIT         ?STACK


            * * * * * * *  X D A T A   M E M O R Y  * * * * * * *
            XDATA   0000H     0056H     UNIT         ?XD?USB
            XDATA   0056H     004EH     UNIT         ?XD?MAIN
            XDATA   00A4H     000EH     UNIT         _XDATA_GROUP_
                    00B2H     034EH                  *** GAP ***
            XDATA   0400H     0400H     ABSOLUTE     


            * * * * * * *   C O D E   M E M O R Y   * * * * * * *
            CODE    0000H     0003H     ABSOLUTE     
                    0003H     27FDH                  *** GAP ***
            CODE    2800H     0001H     ABSOLUTE     
                    2801H     01FFH                  *** GAP ***
            CODE    2A00H     01B7H     UNIT         ?PR?HANDLE_SETUP?USB
            CODE    2BB7H     0179H     UNIT         ?PR?MAIN?MAIN
            CODE    2D30H     0116H     UNIT         ?PR?GET_DESCRIPTOR?USB
            CODE    2E46H     00EDH     UNIT         ?CO?USB_HID_DESCRIPTOR
            CODE    2F33H     00D4H     UNIT         ?C?LIB_CODE
            CODE    3007H     00C7H     UNIT         ?PR?BOOTLOADERHANDLER?MAIN
            CODE    30CEH     00BAH     UNIT         ?PR?GET_STATUS?USB
BL51 BANKED LINKER/LOCATER V5.03                                                      07/31/2011  16:07:05  PAGE 2




            CODE    3188H     0092H     UNIT         ?C_C51STARTUP
            CODE    321AH     0091H     UNIT         ?PR?SET_FEATURE?USB
            CODE    32ABH     008FH     UNIT         ?PR?CLEAR_FEATURE?USB
            CODE    333AH     0086H     UNIT         ?PR?_HID_SENDDATA?USB
            CODE    33C0H     0080H     UNIT         ?PR?SET_CONFIGURATION?USB
            CODE    3440H     0080H     UNIT         ?PR?_USB_ENABLE?USB
            CODE    34C0H     007DH     UNIT         ?PR?HANDLE_OUT2?USB
            CODE    353DH     007BH     UNIT         ?PR?USB
            CODE    35B8H     006BH     UNIT         ?PR?HANDLE_IN1?USB
            CODE    3623H     0069H     UNIT         ?PR?USB_HANDLER?USB
            CODE    368CH     005CH     UNIT         ?PR?_FIFO_READ?USB
            CODE    36E8H     005BH     UNIT         ?C_INITSEG
            CODE    3743H     0059H     UNIT         ?PR?GET_CONFIGURATION?USB
            CODE    379CH     004BH     UNIT         ?PR?SET_ADDRESS?USB
            CODE    37E7H     0049H     UNIT         ?PR?MAIN
            CODE    3830H     0049H     UNIT         ?PR?_FIFO_WRITE?USB
            CODE    3879H     0044H     UNIT         ?PR?GET_INTERFACE?USB
            CODE    38BDH     003AH     UNIT         ?PR?_USB_GETOUTDATA?USB
            CODE    38F7H     0035H     UNIT         ?PR?SET_INTERFACE?USB
            CODE    392CH     0024H     UNIT         ?PR?CLOCK_INIT?MAIN
            CODE    3950H     001DH     UNIT         ?PR?USB_RESET?USB
            CODE    396DH     001AH     UNIT         ?PR?FORCE_STALL?USB
            CODE    3987H     000AH     UNIT         ?PR?IO_CONFIG?MAIN
            CODE    3991H     000AH     UNIT         ?PR?USB_RESUME?USB
            CODE    399BH     0004H     UNIT         ?CO?USB
            CODE    399FH     0003H     UNIT         ?PR?_USB_INIT?USB
            CODE    39A2H     0001H     UNIT         ?PR?USB_SUSPEND?USB
当然也可以自己指定,可参考
http://blog.sina.com.cn/s/blog_4c5cec3b0100dmtd.html
http://wenku.baidu.com/view/72d642ef5ef7ba0d4a733b40.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
测试程序说明 说明:需要显示的将通过串口显示在“串口调试助手”上,串口波特率9600。本开发板提供的串口调试助手不支持中文显示。 (1) AD_TEST: 摘 要: 本文件是AD测试实验;测试前需要对管脚复用的电压基准进行设置,将JP10的2,3脚短接,1脚空出。AD输入端子(J10)可输入4路AD(ADC0--ADC3),另有1路可测量片内温度,5路采样值都通过串口发送出去,在串口调试助手上看观察其值。4路AD中ADC0可通过跳线器(JP5)“ADJ_VOL”(1,2脚短接)与板上电位器相连,通过手动调VR1可以观察到电压值的变化。 (2) I2C_E2PROM: 摘 要: 本文件是I2C总线读写EEPROM(AT24C02)测试程序;将跳线器JP6的1,2脚短接,JP10的1,2脚短接,当按下KEY1,KEY2,KEY3任一键时会将对应的键值“1”,“2”,“3”写入EEPROM,同时数码管有提示,程序只保存最后一个键值,当按下KEY4时,程序会读出保存的最后一个键值,同时显示在数码管上。 (3) KEY: 摘 要:本文件是键盘测试子程序;分别将跳线器JP4的<1,2>,<3,4>,<5,6>,<7,8>脚短接,每按一个键,蜂鸣器响(蜂鸣器需将JP7短接)一声,同时会在数码管上显示对应的键值。 (4) PWM: 摘 要:本文件是PCA实现PWM测试程序,将跳线器JP9的<1,2>,<3,4>,<5,6>,<7,8>,<9,10>脚短接,分别按下4个按键将对应4种脉宽的PWM输出,可通过观察LED的亮度或通过示波器观察。 (5) UART: 摘 要: 本文件是串口测试程序,将跳线器JP3的<1,2>,<3,4>脚短接。当分别按下KEY1,KEY2,KEY3,KEY4时,串口调试助手上会显示“KEY1”“KEY2”等字样。 (6) USB: 摘 要:本文件是包括C8051F320与PC机通讯所需的所有文件,“usb\C8051F32x\F320 Device”目录下为单片机源程序,“usb\C8051F32x\Host”目录下为PC软件的VB,VC源码及编译好的*.exe文件(目录TESTEXE下),“usb\WinDriver”下为PC驱动。安装好驱动后可以实现PC与ML-320DK开饭板之间的通讯,PC软件可显示ADC0采样到的电压,芯片温度及按键状态(按下按键PC软件会有相应的显示),另外,可通过软件控制板上5个LED的亮灭。需要注意的是USB演示程序中用到AD,KEY部分,所以在测试前需要对涉及到的跳线进行设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值