❶ 单片机c语言每句详解(只限今天解答)
网络入学蠢余任务:指定 S1 为P1口搭档旦第0位 S2为 P1口 第1位
LED1为P0口第0位 LED2为P0口第1位知扰
LED1=S1; //直接将P1.0 送到P0.0
LED2=S2; //直接将P1.1 送到P0.1
❷ 帮我解释下单片机c语言程序
/********
//p1.0波形为:
//1、10ms为周期的方波或持续的高、低电平(与flag、p1.0初始值有关),持续2秒。
//2、持续的高、低电平或10ms为周期的方波(与flag、p1.0初始值有关),持续2秒。
//3、重复1、2步骤。
*********/
#include
unsigned
int
t02s;
unsigned
char
t05ms;
bit
flag;
void
main(void)
{
tmod=0x01;
//初始化定时器。
//可以对照单片机pdf相应章节,按位对比。
//此处设置定时器0工作于“16
位定时器/
计数器,tl0、th0
全用”模式。
th0=(65536-500)/256;
//初始化定时/计数器高字节。
tl0=(65536-500)%256;
//初始化。。。。。。低字节。
tr0=1;
//启动定时器0。
//以下两句开启定时器中断,缺一不可。
et0=1;
//允许定时器0中断。
ea=1;
//开启全局中断。
while(1);
//循环,整个程序交由定时中断控制。
}
//此处为定时器中断子程序,每次定时器溢出,进入此段程序。
//根据参数定义,每5ms中断一次。
//定时器中断后,计数不停止,但是需要重新初始化定时/计数器。
void
t0(void)
interrupt
1
using
0
{
//重新“初始化定时/计数器”高、低字节。
th0=(65536-500)/256;
tl0=(65536-500)%256;
//每次中断,t02s
加
1。
t02s++;
//增加400次后(5ms
×
400
=
2s),flag标志取反。
if(t02s==400)
{
t02s=0;
flag=~flag;
}
//若中断时flag标志为0,p1.0口取反。
if(flag==0)
{
p1_0=~p1_0;
}
}
❸ 单片机c语言程序解读,,求解释。。
include <reg52.h>
#include <intrins.h>
是头文件
#define uchar unsigned char
#define uint unsigned int
是宏定义
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf
};
这袜搭是数码管的显示不同数的代码
uchar code Table_OF_Digits[][8]=
{
{0,9,10,1,2,10,2,5},
{2,1,10,5,7,10,3,9},
};
要显示的数
void DSY_Show() interrupt 1
{
TH0 = (8191-4000)/32;
TL0 = (8191-4000)%32;
P3 = _crol_(P3,1);
P0 = DSY_CODE[Table_OF_Digits[i][j]];
j = (j+1)%8;
if(++t!=350) return;
t = 0;
i = (i+1)%2;
}
设定动态扫描间隔时间和要显示 的数
其中
TH0 = (8191-4000)/樱游32;
TL0 = (8191-4000)%32; 是设定动态扫描间隔时间
P3 = _crol_(P3,1);
P0 = DSY_CODE[Table_OF_Digits[i][j]];
j = (j+1)%8;
if(++t!=350) return;
t = 0;
i = (i+1)%2;
是要动态显示的数及选通控制
void main()
{
P3 = 0x80;
TMOD = 0x00;
TH0 = (8191-4000)/32;
TL0 = (8191-4000)%32;
IE = 0x82;
TR0 = 1;
while(1);
}
其中
TMOD = 0x00;
TH0 = (8191-4000)/脊好销32;
TL0 = (8191-4000)%32;
IE = 0x82;
TR0 = 1;
是确定定时器的工作模式及初始化定时器
❹ 单片机C语言程序分析
uint8_t *ptr uint8_t len 这是传扰袜入参数。 len可能是长度,ptr可能指向的是一个数组。
^= 按位异或后赋值。
crc ^= *ptr++; //首先将数组第一位异或后复制给Crc。之后ptr再向前一步,简单理解就是指向数组的下一位。
for(i = 0;i < 8;i++) { if(crc & 0x01) crc = (crc >> 1) ^ 0x8C; else crc >>= 1; }
//将取卖闭到数组第一位值,与0x01上。如果非零,crc就需要右移一位,再与0x8C异或。否则右移1位。每位数组值要做8次。
while(len--) //表示要判断数组内len个值。或则说是取得数组内len长度的元素个数。
return crc; //len个数组值都作完以后,将Crc返回。
我想你需要了解一下 0x01的意义,0x8C的意中李裂义。
0x01 = 0000 0001
0x8c = 1000 1100
没看到啊,已经有人答完了。哎,早知道就不写这么多字了。
❺ 单片机c语言程序,看不懂 ,求讲解
本文分三个步骤介绍12864的内部资源原理,指令集详细讲解,以及应用例子。
对12864的所有操作概括起来有4种:
1)、读忙状态(同时读出指针地址内容),初始化之后每次对12864的读写均要进行忙检测。
2)、写命令:所有的命令可以查看指令表,后续讲解指令的详细用法。写地址也是写指令。
3)、写数据:操旦哪凯作对象有DDRAM、CGRAM、GDRAM。
4)、读数据:操作对象也是DDRAM、CGRAM、GDRAM。
关于编码在DDRAM中的存储需要说明事项如下:
1)、每次对DDRAM的操作单位是一个字,也就是2个字节,当往DDRAM写入数据时,首先写地址,然后连续送入2个字节的数据,先送高字节数据,再送低字节数据。读数据时也是如此,先写地址,然后读出高字节数据,再读出低字节数据(读数据时注意先假读一次)。
2)、显示ASCII码半宽字符时,往每个地址送入2个字节缓裂的ASCII编码,对应屏幕上的位置就会显示2个半宽字符,左边的为高字节字符,右边的为低字节字符。
3)、显示汉字时,汉字编码的2个字节必须存储在同一地址空间中,不能分开放在2个地址存放,否则显示的就不是你想要的字符。每个字中的2个字节自动结合查找字模并显示字符。所以,如果我们往一个地址中写入的是一个汉字的2字节编码就会正确显示该字符,编码高字节存放在前一地址低字节,编码低字节模唤存放在后一地址高字节,显然他们就不会结合查找字模,而是与各地址相应字节结合查找字模。
❻ 请解释下单片机中的C语言程序
在你include的头文件里肯定有ADDO的定义,一定是个输入端口,dat|=ADDO代表
dat=dat|ADDO;之后dat<<=1就是dat=dat<<1,左移1位,i==7就是最后1位的时候又采样1次。
❼ 单片机C语言程序,看不懂,求讲解
“T0中断服务程序不是一个子程序吗?但没看见在主程序中调用这个子程序啊,求讲解这个程序命令的运行过程,定时器怎么中断的?”
该子程序是在硬件产生中断的时候,跳转到相应中断入口后,再跳转到这个中断服务程序的。请注意函数后面的“interrupt x”声明,这是C51的扩展内容。
“用示波器测波形是测p1.0引脚,为什么是这个引脚,怎么确定的?咐族仿p1_0不是个变量名吗?”
P1_0这个符号在前面的头文件穗漏 t89c51cc02.h 中有定义。至于“为什么是这个引脚”,是由硬件设计及本程序共同确定的。P1_0(不是你写的p1_0,C语言要区分衡纤大小写哦)代表P1口的第0管脚,在头文件中通过sbit定义。
“为什么T0中断服务程序和主程序中都有T0的初值,设置还是一样,他们有什么关系?”
主程序前面的是对Timer0初始化,赋以初值。执行 TR0 = 1; 这一句以后,Timer0就开始运行了——TL0与TH0组成的13位计数器开始不断递增。当13位全部为1之后,再递增就全部为0,此时溢出事件会触发产生定时器0,同时计数器仍然在继续计数——为了让时间间隔保持一致,就需要再度将计数器赋以初值。