8051相关内容
我是嵌入式系统编程的新手.我正在开发使用 8051 芯片组的设备.我在示例程序中注意到,在定义变量时,有时它们使用关键字 xdata.像这样…… static unsigned char xdata PatternSize; 而其他时候 xdata 关键字被省略. 我的理解是 xdata 关键字指示编译器将该变量存储在外部、闪存、内存中. 在什么情况下我应该使用 xdata
..
..
在Linux mint 19上的 mcu8051ide 无法正常工作或无法打开,所有依赖项都已安装,但是当我检查库时,itcl不存在是错误. 我很困惑该怎么办?
..
我们知道指针的大小取决于地址总线,那么像8051这样的8位微控制器上的指针大小是多少? 解决方案 8051不是C友好处理器. 它有几个地址空间.我广泛使用了Keil 8051编译器,它具有几种指针类型. 一个8位指针,指向内部存储器空间或内部间接空间. 一个16位指针,指向外部ram或代码空间. 一个“智能" 24位指针,可以指向任何地方.基本上是一个标签,后跟16位.
..
假设您有一个没有外部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;将结果
..
我的问题是,当加法超出8位范围时,我不知道如何处理. 我的程序以#16h +#05h之类的小十六进制数字运行,但没有以#0A9H +#0B5H之类的较高十六进制数运行. 解决方案 对于2个数字,有一个asm技巧:进位标志保存ADD结果的第9位,我们可以通过旋转右移该9位值-直通携带.8051的 RRC指令可以做到这一点. 添加A,R0RRC 如果没有,请参阅类似的问题如何安全地
..
如何启用8051的外部中断? 解决方案 每个8051s中断在中断允许(IE)特殊功能寄存器(SFR)中都有其自己的位,并且可以通过将相应的位置1来使能.下面的代码示例以8051汇编语言以及C语言编写,以提供正在发生的情况的大致概念. 要启用外部中断0(EX0),需要设置IE的位0. SETB EX0或ORL IE,#01或MOV IE,#01 要启用外部中断1(EX1),
..
我已经通过UART收到了一个字符,需要验证它是否是数字字符. 通常我会做 if (char >= '0' && char
..
我是嵌入式系统编程的新手.我正在使用8051芯片组的设备上工作.我在示例程序中注意到,在定义变量时,有时它们使用关键字xdata.像这样... 静态无符号字符xdata PatternSize; 而其他时候省略xdata关键字. 我的理解是xdata关键字指示编译器将该变量存储在外部闪存中. 在什么情况下我应该使用xdata在外部存储变量?访问这些变量需要更长的时间,对吗?
..
如何在闪存的特定存储位置写入功能?有任何指令吗?我需要特定的链接器吗? 解决方案 如果使用的是keil ide,则可以使用.ARM .__ at_address作为节名称在特定地址处放置函数.要将函数add放置在0x20000,请指定: int add(int n1,int n2) __attribute__((section(".ARM.__at_0x20000"))); int
..
我想为8051做一个RTOS,并且非常困惑,因为8051中的操作系统应该遵循最低要求,因为8051在RAM和ROM的情况下非常限制了资源。这是只是和作业类型的问题,但我真的很困惑,因为我们为8051的软件是不是一个操作系统?哪些特征与RTOS的微控制器的正常的常规编码不同?请帮助谢谢 解决方案 一个典型的RTOS至少提供以下内容: 确定性任务调度 任务同步机制 进程间通信机制
..
我继承了一个用8051汇编语言编写的10K线程序,需要进行一些更改。不幸的是,它是用最好的意大利面条代码的传统。该程序作为单个文件编写 - 是一个迷宫的CALL和LJMP语句(总共约为1200个),子程序具有多个入口点和/或出口点,如果它们可以被识别为子程序。所有变量都是全局的。有评论有些是正确的。没有现有的测试,没有预算的重构。 应用程序的一点背景:代码控制目前在国际上部署的自动售货机应用
..
我继承了一个使用8051汇编语言编写的10K行程序,需要进行一些更改。不幸的是,它写在意大利面条代码的最好的传统。程序 - 写为单个文件 - 是一个CALL和LJMP语句的迷宫(总共约1200个),子程序有多个入口点和/或出口点,如果它们可以被识别为子程序。所有变量都是全局变量。有评论;一些是正确的。没有现有的测试,也没有重构的预算。 应用程序的一些背景:代码控制目前部署在国际上的自动售货应
..
我工作在C程序,并使用了8051架构设备SDCC编译器。 我想编写一个名为的GetName函数,将读取闪存8个字符,并以某种形式返回字符数组。我知道这是不可能在C返回一个数组,所以我想用做这样的结构: // ********** FLASH.h文件************ ******************* MYSTRUCT的GetName(int i)以; //函数原型#定义NAME_
..
我不是在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 =
..
我使用的是专有的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
..
我继承写的,需要一些改变8051汇编语言10K行的程序。不幸的是它是写在意大利面条code的优良传统。该方案 - 写成一个单独的文件 - 是CALL和LJMP语句(约1200个)的迷宫,具有多个入口和/或出口点的子程序,如果他们能在所有被认定为子程序。所有变量都是全球性的。有评论;有些是正确的。有没有现有的测试,也没有预算的重构。 在应用程序中的小背景:code控制在当前国际上部署了一个自动售货
..
我需要写一个延时子程序。它应该延迟约1秒。它必须是8051的环境中,DS89C430 micrcontroller(11.0592兆赫XTAL)。我怎么能写这个子程序? Delay1sec:... .... ... .... ... 解决方案 要得到一个确切的延迟1秒的中断期间也正常,你需要使用一个硬件定时器,而不是一个软件定时器。我会建议你使用现有的车载计时器之一杰里·科芬的建议。
..