在学习指针的章节时,我发现c++的指针我还没学,就去学习了一下然后再学习的指针在单片机程序中的应用,指针这方面的知识有些难理解,刚开始时经常把概念搞混,多看一会就能搞清了。
程序:
指针流水灯
#include<reg52.h>
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;
void ShiftLeft(unsigned char *p);
void main()
{
unsigned int i;
unsigned char buf = 0x01;
ENLED = 0;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while(1)
{
P0 = ~buf;
for(i = 0;i<60000;i++);
ShiftLeft(&buf);
if(buf == 0)
{
buf = 0x01;
}
}
}
void ShiftLeft(unsigned char *p)
{
*p = *p<<1;
}
指针测数组占用字节数
#include<reg52.h>
bit cmdarrived = 0;
unsigned char cmdindex = 0;
unsigned char cnttxd = 0;
unsigned char *ptrtxd;
unsigned char array1[1] = {1};
unsigned char array2[2] = {1,2};
unsigned char array3[4] = {1,2,3,4};
unsigned char array4[8] = {1,2,3,4,5,6,7,8};
void configuart(unsigned int baud);
void main()
{
EA = 1;
configuart(9600);
while(1)
{
if(cmdarrived)
{
cmdarrived = 0;
switch(cmdindex)
{
case 1:
ptrtxd = array1;
cnttxd = sizeof(array1);
TI = 1;
break;
case 2:
ptrtxd = array2;
cnttxd = sizeof(array2);
TI = 1;
break;
case 3:
ptrtxd = array3;
cnttxd = sizeof(array3);
TI = 1;
break;
case 4:
ptrtxd = array4;
cnttxd = sizeof(array4);
TI = 1;
break;
default:
break;
}
}
}
}
void configuart(unsigned int baud)
{
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = 255-(32768000/12/32)/baud;
TL1 = TH1;
ET1 = 0;
ES = 1;
TR1 = 1;
}
void InterruptUART() interrupt 4
{
if(RI)
{
RI = 0;
cmdindex = SBUF;
cmdarrived = 1;
}
if(TI)
{
TI = 0;
if(cnttxd>0)
{
SBUF = *ptrtxd;
cnttxd--;
ptrtxd++;
}
}
}
|