8051相关内容

我什么时候使用 xdata?

我是嵌入式系统编程的新手.我正在开发使用 8051 芯片组的设备.我在示例程序中注意到,在定义变量时,有时它们使用关键字 xdata.像这样…… static unsigned char xdata PatternSize; 而其他时候 xdata 关键字被省略. 我的理解是 xdata 关键字指示编译器将该变量存储在外部、闪存、内存中. 在什么情况下我应该使用 xdata ..
发布时间:2022-01-25 12:58:36 其他开发

8位微控制器(如8051)上的指针大小是多少?

我们知道指针的大小取决于地址总线,那么像8051这样的8位微控制器上的指针大小是多少? 解决方案 8051不是C友好处理器. 它有几个地址空间.我广泛使用了Keil 8051编译器,它具有几种指针类型. 一个8位指针,指向内部存储器空间或内部间接空间. 一个16位指针,指向外部ram或代码空间. 一个“智能" 24位指针,可以指向任何地方.基本上是一个标签,后跟16位. ..
发布时间:2021-05-04 19:03:16 其他开发

实现对8051的功能调用

假设您有一个没有外部RAM的8051微控制器.内部RAM为128字节,您大约有80字节可用.并且您想编写一种用于堆栈语言的编译器. 假设您要编译RPN表达式 2 3 + .8051具有本机 push 和 pop 指令,因此您可以编写 push#2推#3 然后您可以将 + 实施为: pop A;将2弹出到寄存器A中弹出B;将3弹出到寄存器B中加A,B;A = A + B推A;将结果 ..
发布时间:2021-04-23 19:56:26 其他开发

平均2个寄存器,避免汇编中的溢出?

我的问题是,当加法超出8位范围时,我不知道如何处理. 我的程序以#16h +#05h之类的小十六进制数字运行,但没有以#0A9H +#0B5H之类的较高十六进制数运行. 解决方案 对于2个数字,有一个asm技巧:进位标志保存ADD结果的第9位,我们可以通过旋转右移该9位值-直通携带.8051的 RRC指令可以做到这一点. 添加A,R0RRC 如果没有,请参阅类似的问题如何安全地 ..
发布时间:2021-04-12 20:46:43 其他开发

8051外部中断

如何启用8051的外部中断? 解决方案 每个8051s中断在中断允许(IE)特殊功能寄存器(SFR)中都有其自己的位,并且可以通过将相应的位置1来使能.下面的代码示例以8051汇编语言以及C语言编写,以提供正在发生的情况的大致概念. 要启用外部中断0(EX0),需要设置IE的位0. SETB EX0或ORL IE,#01或MOV IE,#01 要启用外部中断1(EX1), ..
发布时间:2020-11-30 04:19:12 其他开发

什么时候使用xdata?

我是嵌入式系统编程的新手.我正在使用8051芯片组的设备上工作.我在示例程序中注意到,在定义变量时,有时它们使用关键字xdata.像这样... 静态无符号字符xdata PatternSize; 而其他时候省略xdata关键字. 我的理解是xdata关键字指示编译器将该变量存储在外部闪存中. 在什么情况下我应该使用xdata在外部存储变量?访问这些变量需要更长的时间,对吗? ..
发布时间:2020-05-08 21:58:42 其他开发

如何在闪存的特定存储位置写入功能?有任何指令吗?

如何在闪存的特定存储位置写入功能?有任何指令吗?我需要特定的链接器吗? 解决方案 如果使用的是keil ide,则可以使用.ARM .__ at_address作为节名称在特定地址处放置函数.要将函数add放置在0x20000,请指定: int add(int n1,int n2) __attribute__((section(".ARM.__at_0x20000"))); int ..
发布时间:2020-05-01 03:53:26 其他开发

8051的基本要求称为RTOS

我想为8051做一个RTOS,并且非常困惑,因为8051中的操作系统应该遵循最低要求,因为8051在RAM和ROM的情况下非常限制了资源。这是只是和作业类型的问题,但我真的很困惑,因为我们为8051的软件是不是一个操作系统?哪些特征与RTOS的微控制器的正常的常规编码不同?请帮助谢谢 解决方案 一个典型的RTOS至少提供以下内容: 确定性任务调度 任务同步机制 进程间通信机制 ..
发布时间:2017-08-15 21:12:26 HTML/CSS

解开汇编语言意大利面条码

我继承了一个用8051汇编语言编写的10K线程序,需要进行一些更改。不幸的是,它是用最好的意大利面条代码的传统。该程序作为单个文件编写 - 是一个迷宫的CALL和LJMP语句(总共约为1200个),子程序具有多个入口点和/或出口点,如果它们可以被识别为子程序。所有变量都是全局的。有评论有些是正确的。没有现有的测试,没有预算的重构。 应用程序的一点背景:代码控制目前在国际上部署的自动售货机应用 ..
发布时间:2017-08-15 20:15:33 HTML/CSS

解开汇编语言意大利面条码

我继承了一个使用8051汇编语言编写的10K行程序,需要进行一些更改。不幸的是,它写在意大利面条代码的最好的传统。程序 - 写为单个文件 - 是一个CALL和LJMP语句的迷宫(总共约1200个),子程序有多个入口点和/或出口点,如果它们可以被识别为子程序。所有变量都是全局变量。有评论;一些是正确的。没有现有的测试,也没有重构的预算。 应用程序的一些背景:代码控制目前部署在国际上的自动售货应 ..
发布时间:2016-12-14 14:42:45 开发方法

是否所有的C编译器允许函数返回结构?

我工作在C程序,并使用了8051架构设备SDCC编译器。 我想编写一个名为的GetName函数,将读取闪存8个字符,并以某种形式返回字符数组。我知道这是不可能在C返回一个数组,所以我想用做这样的结构: // ********** FLASH.h文件************ ******************* MYSTRUCT的GetName(int i)以; //函数原型#定义NAME_ ..
发布时间:2016-08-23 11:40:57 C/C++

C8051f312单片机

我不是在C语言非常好,但我有写一个很简单的code到C8051F312微控制器。 我的code不工作。请帮我做什么我错了。 的#include C8051F310.h 的#include stdio.h中SBIT LED_16 = P1 ^ 7; //绿色LED:1 = ON; 0 = OFF无效的init(无效) { //的XBRn registers_init XBR0 = ..
发布时间:2016-08-19 15:25:28 C/C++

8051液晶的'Hello World' - 可变取代DB

我使用的是专有的8051板学习汇编编程。我目前工作的一个LCD的'Hello World“程序上。这里的code。 lcd_cmd EQU 0800H;写命令章地址0800H lcd_st EQU 0801h;读STATUS寄存器地址0801h lcd_wr EQU 0802h;写入数据的地址章0802h lcd_rd EQU 0803h;读取数据章地址0803hORG 08100h你好: M ..
发布时间:2016-07-18 20:52:02 .NET Framework

Unravelling汇编语言面条code

我继承写的,需要一些改变8051汇编语言10K行的程序。不幸的是它是写在意大利面条code的优良传统。该方案 - 写成一个单独的文件 - 是CALL和LJMP语句(约1200个)的迷宫,具有多个入口和/或出口点的子程序,如果他们能在所有被认定为子程序。所有变量都是全球性的。有评论;有些是正确的。有没有现有的测试,也没有预算的重构。 在应用程序中的小背景:code控制在当前国际上部署了一个自动售货 ..
发布时间:2016-07-18 20:36:27 .NET Framework

编写一个延时子程序?

我需要写一个延时子程序。它应该延迟约1秒。它必须是8051的环境中,DS89C430 micrcontroller(11.0592兆赫XTAL)。我怎么能写这个子程序? Delay1sec:... .... ... .... ... 解决方案 要得到一个确切的延迟1秒的中断期间也正常,你需要使用一个硬件定时器,而不是一个软件定时器。我会建议你使用现有的车载计时器之一杰里·科芬的建议。 ..
发布时间:2016-07-18 20:16:23 .NET Framework