首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2024国际航空电子大会
2024国际 AIoT 生态发展大会
3D IC 设计和Chiplet资料下载
车载总线测试和解码方案
新能源汽车三电测试技术中心
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
论坛
博文
电子工程专辑
电子技术设计
国际电子商情
资料
白皮书
研讨会
芯语
文库
登录|注册
登录
最新发表
推荐阅读
明星博主
原创博文
年度排行
博文排行
博文评论
FPGA/CPLD
MCU/ 嵌入式
模拟
电源/新能源
测试测量
通信
智能手机
处理器与DSP
PCB
汽车电子
消费电子
智能硬件
物联网
软件与OS
采购与分销
供应链管理
工程师职场
EDA/ IP/ 设计与制造
无人机
机器人/ AI
医疗电子
工业电子
管理
写博文
用户1379474
修改
文章:
105
阅读:
204878
评论:
12
赞:
357
好友
私信
个人主页
文章
105
原创
0
阅读
204878
评论
12
赞
357
原创
C51问答
2008-4-18 20:45
1433
6
6
分类:
MCU/ 嵌入式
C51问答
一、#pragma asm是什么意思?
#pragma asm
MOV P1,R7
NOP
NOP
MOV P1,#0
#pragma endasm
实际上就是一个在C51中内嵌汇编语言的开关
二、一个 hex to bcd 的算法程序
HEX_BCD:CLR A
MOV 30H,A
MOV 31H,A
MOV 32H,A
MOV R2,#15
H_B0: MOV A,R1
RLC A
MOV R1,A
MOV A,R0
RLC A
MOV R0,A
MOV A,32H
RLC A
ACALL BCD_ADJ
MOV 32H,A
MOV A,31H
RLC A
ACALL BCD_ADJ
MOV 31H,A
MOV A,30H
RLC A
ACALL BCD_ADJ
MOV 30H,A
DJNZ R2,H_B0
MOV A,R0
RLC A
MOV A,32H
RLC A
MOV 32H,A
MOV A,31H
RLC A
MOV 31H,A
MOV A,30H
RLC A
MOV 30H,A
RET
BCD_ADJ:PUSH PSW
PUSH ACC
CJNE A,#50H,$+2
JC B1
POP ACC
ADD A,#30H
PUSH ACC
B1: ANL A,#0FH
CJNE A,#5,$+2
JC B2
POP ACC
ADD A,#3
PUSH ACC
B2: POP ACC
POP PSW
RET
三、有关单片机ALE引脚的问题
"单片机不访问外部锁存器时ALE端有正脉冲信号输出,此频率约为时钟振荡频率的1/6.每当访问
外部数据存储器是,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲."这句话是不是有毛
病.我觉得按这种说法,应该丢失3个ALE脉冲才对,我一直想不通是怎么回事,希望大虾们帮帮我.
小弟感激涕零.
答:
其他所有指令每6个机器周期发出一个ALE,而MOVX指令占用12个机器周期只发出一个ALE
四、如何将一个INT型数据转换成2个CHAR型数据?
经keil优化后,char1=int1/256,char2=int1%256或char1=int1>>8,char2=int1&0x00ff效率是一样的。
五、在KEIL C51上仿真完了,怎样生成HEX文件去烧写??
右键点项目中Target 1,选第二个,在OUTPUT中选中CREAT HEX
六、typedef 和 #define 有何不同??
typedef 和 #define 有何不同》》》 如
typedef unsigned char UCHAR ;
#define unsigned char UCHAR ;
typedef命名一个新的数据类型,但实际上这个新的数据类型是已经存在的,只不过是定义了
一个新的名字.
#define只是一个标号的定义.
你举的例子两者没有区别,但是#define还可以这样用
#define MAX 100
#define FUN(x) 100-(x)
#define LABEL
等等,这些情况下是不能用typedef定义的
七、请问如何设定KELC51的仿真工作频(时钟)
用右键点击左边的的target 1,然后在xtal一栏输入
八、不同模块怎样共享sbit变量,extern不行?
把SBIT定义单独放到一个.H中,每个模块都包含这个.h文件
九、C51中对于Px.x的访问必须自己定义吗?
是的。
如sbit P17 = 0x97;即可定义对P1.7的访问
十、SWITCH( )语句中表达式不可以是位变量对吗?
可以用位变量:
#include
#include
void main()
{
bit flag;
flag=0;
switch(flag)
{
case '0':{printf("0\n");break;}
case '1':{printf("1\n");break;}
default:break;
}
}
bit 变量只有两种状态,if 语句足够啦,!!!
十一、const常数声明占不占内存???
const 只是用来定义“常量”,所占用空间与你的定义有关,如:
const code cstStr[] = {"abc"};
占用代码空间;而如:
const char data cstStr[] = {"abc"};
当然占用内存空间。
另外,#define 之定义似乎不占用空间。
十二、philips的单片机P89C51RD+的扩展RAM在C51中如何使用?
试一试将auxr.1清0,然后在c语言中直接声明xdata类型的变量
十三、BUG of Keil C51
程序中用如下语句:
const unsigned char strArr[] = {"数学"};
结果发现strArr[] 内容为 {0xCA,0xD1,0xA7},真奇怪!
凡是有0xfd,则会通通不见了,所以只能手工输入内码了,例如 uchar strArr[]=
{0xCA,0xfd,0xd1,0xa7}(用Ultraedit会很方便)。
十四、Keil C51中如何实现代码优化?
菜单Project下Option for target "Simulator"的C51.
看到Code optimization了吗?
十五、请教c的!和 ~ 符号有甚区别??
!是逻辑取反,~是按位取反。
十六、c51编程,读端口,还要不要先输出1?
我怎么看到有的要,有的不要,请高手给讲讲,到底咋回事?谢了
要输出1的,除非你能保证之前已经是1,而中间没有输出过其他值。
十七、当定时器1(T1)用于产生波特率时,P3^5还是否可以用作正常的I/O口呢?
p3.5完全可以当普通的io使用
十八、C51中 INT 转换为 2个CHAR?
各位高手:
C51中 INT 转换为 CHAR 如何转换诸如:
X = LOW(Z);
Y = HIGH(Z);
答:
x=(char)z;
y=(char)(z>>8);
十九、如果我想使2EH的第7位置1的话,用位操作可以吗?
现在对位操作指令我一些不太明白请各位多多指教:
如 SETB 07H 表示的是20H.7置1,对吗?(我在一本书上是这么看到的)
那么如果我想使2EH的第7位置1的话,象我举的这个例子怎么表示呢?谢谢!
SETB 77H
setb (2eh-20h)*8+7
20h-2fh每字节有8个可位操作(00h-7fh),其它RAM不可位直接操作
二十、char *addr=0xc000 和char xdata *addr=0xc000有何区别?
char *addr=0xc000;
char xdata *addr=0xc000;
除了在内存中占用的字节不同外,还有别的区别吗?
char *addr=0xc000; 是通用定义,指针变量 addr 可指向任何内存空间的值;
char xdata *addr=0xc000; 指定该指针变量只能指向 xdata 中的值;
后一种定义中该指针变量(addr)将少占用一个存储字节。
uchar xdata *addr=0xc000;指针指向外ram;
如果:data uchar xdata *addr=0xc000;指针指向外ram但指针本身存在于内ram(data)
中
以此类推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000;
data uchar idata *addr=0xa0;.........
二十一、while(p1_0)的执行时间?
假设,P1_0为单片机P1口的第一脚,请问,
while(P1_0)
{
P1_0=0;
}
while(!P1_0)
{
P1_0=1;
}
以上代码,在KEIL C中,需要多长时间,执行完。能具体说明while(P1_0)的执行时间吗?
仿真运行看看就知道了,
我仿真了试了一下,约14个周期
二十二、怎样编写C51的watchdog程序?
各位大虾,我用KEIL C51 编写了一个带外部开门狗的程序,可程序无法运行起来,经过查
找,发现程序在经过C51编译后,在MAIN()函数的前部增加了一端初始化程序,等到进入
主程序设置开门狗时,开门狗已经时间到,将我的程序复位了,请问我怎样才能修改这一端
初始花程序,使他一运行,就设置开门狗?
可以在startup.a51中加入看门狗刷新指令,当然用汇编,然后重新编译startup.a51
,将他和你的程序连接即可。新的startup.a51会自动代替系统默认的启动模块。
二十三、keil C51 怎样把修改的startup.a51 加到工程文件中
直接加入即可
注意不要改动?STACK,?C_START,?C_STARTUP等符号。startup.a51直接加入项目,不用修改也可。可在内面自己修改汇编的一些限制或堆栈指针。
二十四、关于波特率的设置
我在设定串口波特率时发现一个问题:在晶体震荡器为11.0592MHz时,若设9600BPS的话,
TH1=0XFD,TL1=0XFD,而要设19200BPS的话,TH1、TL1有否变化,如果没变,为什么?
如果变了,又为什么?(因为我看书上俩个是一样的),希望大家点拨。
答:
当电源控制寄存器(PCON)第BIT7(SMOD)为1时波特率加倍。
TH1和TL1的值不变.
二十五、如何在C中声明保留这部分RAM区不被C使用?
我不知道在C源程序中怎么控制这个,但在汇编程序中加入下面一段就行:
DSEG AT 20H
AA: DS 10
这样C51就不会占用20H--29H了
或者在c51里这样定义:
uchar data asm_buff[10] _at_ 0x20;
二十六、问浮点运算问题
我在用C51时发现它对传递浮点参数的个数有限制,请问:
1)参数是以全局变量的形式传递的,请问以全局变量的形式传递的参数也有限制吗?
2)这种传递浮点参数的限制有多少呢?
3)float*float的结果是float类型还是double类型?能否直接赋值给float类型的变量?
答:
由于KEIL C51的参数传递是通过R0-R7来传递的,所以会有限制。
不过KEIL提供了一个编译参数,可以支持更多参数的传递。具体
的内容见KEIL的PDF文档。
我建议你把多个要传递的参数定义到指针或结构体中去,传递参
数通过指针或结构进行,这样好一些。
第3个问题回答是YES,你自己试试不就知道了。
二十七、如何在某一个地址定义ram
用_at_ 命令,这样可以定位灵活一点的地址
uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM
将dis_buff[16]定位在0x6020开始的16个字节
二十八、keil c中,用什么函数可以得到奇偶校验位?
例如32位数据,将四个字节相互异或后检查P即可,若耽心P被改变,可用内嵌汇编。
#include
unsigned char parity(unsigned char x){
x^=x;
if(P)return(1);
else return(0);
}
unsigned char parity2(unsigned int x){
#pragma asm
mov a,r7
xrl ar6,a
#pragma endasm
if(P)return(1);
else return(0);
}
写原创有奖励!2024面包板原创奖励正在进行中
点赞(
6
)
收藏
分享到:
上一篇:
初步认识51芯片
下一篇:
c语言在单片机开发中的应用
PARTNER CONTENT
换一换>
更多>
SK海力士发布2024财年及第四季度财务报告
SK海力士
2025-01-23
含硅还是不含硅?
Shelby Shevik
2025-01-21
德中技术发布数控设备操作系统MOS V1.0版本软件
德中技术
2025-02-06
文章评论
(
0
条评论)
登录
后参与讨论
您需要登录后才可以评论
登录
|
立即注册
发布
用户1379474
修改
文章:
105
阅读:
204878
评论:
12
赞:
357
好友
私信
个人主页
文章
105
原创
0
阅读
204878
评论
12
赞
357
最新评论
更多
丙丁先生 : 再好的大学,也需要靠自身的努力,将资源为我所用,才能发挥大学的作用 再差的大学,也可以通过自身的努力,收获 ...
小恶魔owo ...
评论博文
2025-2-12
【工程师故事】为什么一定要考本科?一位大 ...
请教下用于显示help 窗口 软件是什么 串口通信软件?
来去
评论博文
2025-2-12
【富芮坤FR3068x-C】从入门编译烧录到使用m ...
视频的话,审核通过后的地址是: https://u.eet-china.com/video/3789
axushilong
评论博文
2025-2-12
【富芮坤FR3068x-C】从入门编译烧录到使用m ...
最新
博文
威科赛乐与某公司签署战略合作,开启M ...
AI手机想借DeepSeek翻红!
矢量网络分析仪(VNA)基础解析与应用 ...
资料下载
本周热帖
电解电容介绍
电阻电感电容磁珠的基本介绍 ...
为什么国产SiC碳化硅MOSFET功率器件栅 ...
MP279x应用说明
MP2797芯片手册
【富芮坤FR3068x-C】作为ble_simple_c ...
HTR3218S和HTR3236是多路LED驱动器芯 ...
东莞兆科正式启动MES系统,迈向智能制 ...
自动驾驶规控算法验证到底需要什么样 ...
【富芮坤FR3068x-C】开箱体验 ...
最新资讯
芯语最新
美国对华半导体设备调查升级,称泛林 ...
嵌入式Rust:外设访问包(PAC)简介 ...
企业高管“离职潮”即将来袭?! ...
TekHSI:开启示波器数据传输的高速时 ...
纵目科技创始人被曝失联,办公室断电 ...
广东省委:加快华润微、方正微、粤芯 ...
金刚石-石墨烯异质结构涂层 ...
河南省瞄准碳基新材料功能化应用 ...
又一SiC车规模块产线下线
6G时代:碳纳米管射频器件引领未来 ...
EE直播间
更多
Fabless100系列技术和应用直播 —实时控制、BMS:国产MCU迈向高性能应用
直播时间: 02月18日 10:00
高效协同与版本管理:是德科技设计数据管理软件助力现代芯片设计
直播时间: 02月26日 10:00
第三代功率半导体器件测试解决方案
直播时间: 03月06日 10:00
在线研讨会
更多
重塑机器人未来:揭秘创新芯片解决方案的颠覆力量
使用新型光耦隔离栅极驱动器优化系统效率及EMI表现
Allegro电流传感器替代采样电阻解决方案—实现更高效、更可靠的电流检测
迈来芯电流传感器:从汽车到工业与消费电子全面应用
热门
推荐
构建AI未来,Arm计算平台无处不在
详解状态监控系统的数据采集技术
超越传统分流器:探索新型电流传感解决方案
【直播】创新芯片重塑机器人未来
我要评论
0
6
分享到微信
分享到微博
分享到QQ
点击右上角,分享到朋友圈
我知道啦
请使用浏览器分享功能
我知道啦
关闭
站长推荐
/3
工程师写总结,送示波器、稳压电源、螺丝刀!
分享你的:职业生涯中故事、2024年年终总结、工作中的小故事,丰富多样的礼品等你哦!
面包板社区有奖活动汇总楼
1. DIY赢大奖!2. 写原创,有奖励!3.参与话题,奖励E币!4. 免费申领:开发板试用、书籍试读...
电子工程师DIY来分享,赢大疆无人机、小米手机、NAS存储、万用表 ...
展示您的 DIY 电子设计作品,社区将有丰富奖励送给您!
首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2024国际航空电子大会
2024国际 AIoT 生态发展大会
3D IC 设计和Chiplet资料下载
车载总线测试和解码方案
新能源汽车三电测试技术中心
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
帖子
博文
返回顶部
×
文章评论(0条评论)
登录后参与讨论