登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 浅尝一下指针

[复制链接]
发表于 2022-2-6 20:44:38 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: 学习指针
开始时间: 2022-02-03
结束时间: 2022-02-04
在学习指针的章节时,我发现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++;
}
}
}

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表