永发信息网

谁能帮我解释一下这个C51代码,尤其是void uart_init() #define DAC0832Addr 0x7fff

答案:1  悬赏:60  手机版
解决时间 2021-11-14 12:20
  • 提问者网友:姑娘长的好罪过
  • 2021-11-14 03:32
谁能帮我解释一下这个C51代码,尤其是void uart_init() #define DAC0832Addr 0x7fff
最佳答案
  • 五星知识达人网友:行路难
  • 2021-11-14 04:04
#include
#include
#define DAC0832Addr 0x7fff //这里定义了DAC0832Addr 就是0x7fff
#define uchar unsigned char
#define uint unsigned int
void uart_init(); //是子函数在main函数前申明(不申明,无法在主函数中调用),
void transformdata(uchar c0832data); //数据转换函数
void delay();
void main()
{
uchar cdigital=0;
uart_init();
delay();
while(1)
{
for(cdigital=0;cdigital<255;cdigital++)
{
delay();
transformdata(cdigital);
}
for(cdigital=255;cdigital>0;cdigital--)
{
delay();
transformdata(cdigital);
}
}
}
void transformdata(uchar c0832data)
{
*((uchar xdata*)DAC0832Addr)=c0832data; //这里用的指针,就相当于给该地址(x7fff )直接赋值(变量c0832data的值)
}
void uart_init() //这个子函数是设置寄存器
{
SCON=0x52; //串行控制
TMOD=0x21; //12MHz时钟时波特率为2400

TCON=0x69; //等于是TR1=1;TF0=1; IE1=1;IT0=1
TH1=0xf3; //定时器初值
}
void delay()
{
uint i;
for(i=0;i<250;i++);
}追问void uart_init() 函数在这个代码中是起什么作用的,还有*((uchar xdata*)DAC0832Addr)=c0832data给什么端口赋值????????????追答void uart_init() 函数是对特殊功能寄存器进行设置,每个寄存器的作用都写出了,
*((uchar xdata*)DAC0832Addr)=c0832data不是给端口赋值,那只是一个地址,地址可能是寄存器的地址,但这里的0x7FFF,明显不是寄存器了在数据存储器上面,而是在程序存储器上面。
给你讲下在集成开发环境下很多人的这个误区:例如P1=0;这个是对寄存器P1赋值0,你可以直接用P1是因为有编译器已经帮你把P1定义成了一个指向90H(P1对应的寄存器地址)的一个变量,大家写程序时可以直接用;所以你也可不用刚才那种方法,而是直接对90H 地址写入数据0。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯