求一段单片机的启动程序,我想看看是什么格式的?
发布网友
发布时间:2022-11-27 08:29
我来回答
共2个回答
热心网友
时间:2023-10-15 14:03
如需要STM32的请说明,以下是51单片机的启动程序:
$NOMOD51
;------------------------------------------------------------------------------
; This file is part of the C51 Compiler package
; Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
;------------------------------------------------------------------------------
; STARTUP.A51: This code is executed after processor reset.
;
; To translate this file use A51 with the following invocation:
;
; A51 STARTUP.A51
;
; To link the modified STARTUP.OBJ file to your application use the following
; BL51 invocation:
;
; BL51 <your object file list>, STARTUP.OBJ <controls>
;
;------------------------------------------------------------------------------
;
; User-defined Power-On Initialization of Memory
;
; With the following EQU statements the initialization of memory
; at processor reset can be defined:
;
; ; the absolute start-address of IDATA memory is always 0
IDATALEN EQU 80H ; the length of IDATA memory in bytes.
;
XDATASTART EQU 0H ; the absolute start-address of XDATA memory
XDATALEN EQU 0H ; the length of XDATA memory in bytes.
;
PDATASTART EQU 0H ; the absolute start-address of PDATA memory
PDATALEN EQU 0H ; the length of PDATA memory in bytes.
;
; Notes: The IDATA space overlaps physically the DATA and BIT areas of the
; 8051 CPU. At minimum the memory space occupied from the C51
; run-time routines must be set to zero.
;------------------------------------------------------------------------------
;
; Reentrant Stack Initilization
;
; The following EQU statements define the stack pointer for reentrant
; functions and initialized it:
;
; Stack Space for reentrant functions in the SMALL model.
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1.
;
; Stack Space for reentrant functions in the LARGE model.
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.
;
; Stack Space for reentrant functions in the COMPACT model.
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.
;
;------------------------------------------------------------------------------
;
; Page Definition for Using the Compact Model with 64 KByte xdata RAM
;
; The following EQU statements define the xdata page used for pdata
; variables. The EQU PPAGE must conform with the PPAGE control used
; in the linker invocation.
;
PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
;
PPAGE EQU 0 ; define PPAGE number.
;
PPAGE_SFR DATA 0A0H ; SFR that supplies uppermost address byte
; (most 8051 variants use P2 as uppermost address byte)
;
;------------------------------------------------------------------------------
; Standard SFR Symbols
ACC DATA 0E0H
B DATA 0F0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
NAME ?C_STARTUP
?C_C51STARTUP SEGMENT CODE
?STACK SEGMENT IDATA
RSEG ?STACK
DS 1
EXTRN CODE (?C_START)
PUBLIC ?C_STARTUP
CSEG AT 0
?C_STARTUP: LJMP STARTUP1
RSEG ?C_C51STARTUP
STARTUP1:
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
MOV SP,#?STACK-1
; This code is required if you use L51_BANK.A51 with Banking Mode 4
; EXTRN CODE (?B_SWITCH0)
; CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
LJMP ?C_START
END
热心网友
时间:2023-10-15 14:04
什么叫启动程序?指的是给单片机上电后,单片机能运转的程序吗?如果是的话,这是一段51单片机流水灯的程序。
#include<reg51.h>
void delay(long int t)
{
long int i,j,k;
for(i=0;i<t;i++)
{
for(j=0;j<10;j++)
{
for(k=0;k<100;k++)
{
;
}
}
}
}
void main() //假设低电平有效
{
int i=0,temp;
while(1)
{
temp=0xFF;
for(i=0;i<9;i++)
{
delay(50); //延时500ms
P0=temp;
temp<<=1;
}
}
}
追问嗯
单片机程序的大小是看是什么文件的大小?后缀是什么?
烧到单片机里的程序后缀是 .hex 其实不用担心写的程序过大,用Keil来写单片机程序,先选定单片机种类,写的程序如果大了,编译的时候会有警告的。
别人已经在单片机内写好程序,我该如何去看呢?需要用什么软件呢?
一般单片机程序都是加密的,需要读出来必须先解密,有专门解密的厂家。读出来之后也是16进制的机器码。虽然现在反汇编软件很多。但是把机器码反汇编之后,内容很乱,不容易读懂。如果你想抄袭别人的产品,破解完直接写进去就算了。如果想学习,还是自己查查资料,按照他的功能,自己写 ...
单片机程序大小是看生成的HEX文件的大小还是看KEIL编译结束后显示的CO...
是看CODE的大小,而且这个大小是十进制的,也是烧进单片机内占用内存多少的数据。
这个单片机程序是什么意思?说的不具体的话就不用说了,程序每一步我能...
TAB:DB 3FH,06H,5BH,4FH,5BH,6DH,7DH ; 显示 段码表 为共阴码 0 - 6 MIMS:MOV R4,#250 ; 延时程序 DJNZ R4,RET DISP:MOV R0,#40H ; R0 指向显示 数据 存储器 MOV R2,#01H ; 从第一位开始 显示 DIS:MOV DPTR,#8002H ; 显示器位码地址 MOV A,...
求高手帮忙看一段单片机的C程序
void adc_isr() interrupt 5 using 1 { ADC_CONTR &= !ADC_FLAG;switch(ADC_RES/25) //10 路开关分成10分 // 低两位可以不要 ADC_LOW2 这里不涉及精度只需要判断在那个范围内即可 { case 1:P3=0x03;P2=0xff;led1=0;break;case 2: P3=0x03;P2=0xff;led2=0;break;case 3:P3...
求看单片机程序,运行的时候只能运行数码管,波形产生不了。求帮忙!程序...
求看单片机程序,运行的时候只能运行数码管,波形产生不了。求帮忙!程序如下: 10 #include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint/*波形产生部分*/sbitfup=P2^0;sbitfdown=P2^1;sbitfb=P2^2;sbitsinb=P2^3;sbitjcb=P2^4;sbitt... #include<reg52.h> #include<...
看到一段AVR单片机的程序,那个什么|=(1<<1),(1<<0),(1<<2)是什么意思...
设置某一位而已,1<<1,就是bit1,1<<0,就是bit0~
单片机的启动代码start.s,汇编写的,并没有说地址是在什么位置,怎么可以...
他是你设置的一个定时时间,时间到了就去执行,第二种情况:是你疑惑中断代码,启动代码在整个程序中的位置问题,关于这个我想说在程序开始之前,汇编语言一般都会有 0X00H是程序起始地址,0X08H是中断向量.我不能很理解你的意思,所以,只能说这些,希望对你有帮助!
单片机,C语言写的一小段程序,高手帮看看
这是一个简单的流水灯实验,前面的void delay(uint)是一个函数申明,你这一段里面没有给delay函数,给的程序不够清晰。如果是延迟100ms的话,delay函数应该是这样的:void delay(unsigned int x){ unsigned int i,j;for( i =0;i < x;i++ ){ for( j =0;j<3;j++ );} } 给定delay(...
单片机hex文件怎样读出程序
hex文件是不能直接读出程序的。这是ASCII码形式的二进制代码文件,是看不懂的。但可以用反汇编软件,反汇编出来汇编程序来。就可以修改了。如果你不懂汇编程序就更看不明白了。也只能做到这些了。