当前位置:首页 > 代码 > 正文

单片机g代码解析(怎么读懂单片机代码)

admin 发布:2022-12-19 03:55 157


本篇文章给大家谈谈单片机g代码解析,以及怎么读懂单片机代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

单片机 汇编语言程序解析

这个程序很简单

org 000bh

ljmp itm0 定时器t0中断入口

main: clr P1.0 p1.0低电平

lcall dly500 调用延迟程序

cpl P1.0 p1.0高电平

lcall dly500 调用延迟

ljmp main 主程序,实现是p1.0口高低电平转换

dly500: 延时程序

mov tmod,#0001h

mov tl0,#0b0h

mov th0,#3ch 定时器t0初始化

setb ea 开总中断

setb et0 开t0中断

setb tr0 开始定时器计数

mov r0,#10 默认循环10次

loop: mov a,r0 a赋值10

jz return 判断a是否为零 为零跳转到return

ljmp loop 跳转loop

itm0: 中断运行程序

mov tl0,#0b0h

mov th0,#3ch 初始化定时器

dec r0 r0减一

reti 中断返回

仔细读一读就能懂了 好运!

51单片机如何解释g代码

目前在用3D打印的切片软件或者控制软件。可以试试用cura,3d slicer,或者repetier host,这几个是可以编辑G代码的。如果你想加入单片机,可以在github上找找marlin固件,是arduino mega2560的程序,里面你可以找到怎么加入单片机的。如果想加入STM32的话,那我就无能为力了。

求单片机相关程序解析(1/3)

#include "reg52.h"//声明调用了reg52.h单片机特征库

#include"18b20.h"//声明调用了18b20.h自定义头文件

#include "intrins.h" //声明调用了intrins.h函数库

sbit io_LCD12864_RS = P1^5 ;//将单片机的P1.5口用io_LCD12864_RS来关联,以后对io_LCD12864_RS的操作就是对p1.5口的操作

sbit io_LCD12864_RW = P1^4 ;//原理同上

sbit io_LCD12864_EN = P1^3 ;//原理同上

#define io_LCD12864_DATAPORT P0 //将单片机的P0口用io_LCD12864来关联,以后对io_LCD12864的操作就是对整个P0口的操作(8bit)

#define SET_DATA io_LCD12864_RS = 1 ;//这是#define带赋值的用法,用SET_DATA来代表对io_LCD12864_RS赋1的操作,以后程序中一出现SET_DATA,则io_LCD12864_RS对应的P1.5口就被写1

#define SET_INC io_LCD12864_RS = 0 ;//原理同上

#define SET_READ io_LCD12864_RW = 1 ;//原理同上

#define SET_WRITE io_LCD12864_RW = 0 ;//原理同上

#define SET_EN io_LCD12864_EN = 1 ;//原理同上

#define CLR_EN io_LCD12864_EN = 0 ;//原理同上

unsigned char code table[]={"0123456789"};//在程序代码区定义了一个数组table内容是一个字符串0123456789

/*******************************

忙检测函数

检查12864是否将之前对其写入的指令处理完毕

*********************************/

void v_Lcd12864CheckBusy_f( void ) //

{

unsigned int nTimeOut = 0 ;//定义一个整形的循环次数累加变量

SET_INC //io_LCD12864_RS = 0 指向指令寄存器

SET_READ //io_LCD12864_RW = 1 当前操作变为读操作

CLR_EN //io_LCD12864_EN = 0 EN先变低电平

SET_EN //io_LCD12864_EN = 1 上升沿跳变,指令寄存器的数据被读到12864的端口上

while( ( io_LCD12864_DATAPORT 0x80 ) ( ++nTimeOut != 0 ) ) ;

//查看此时数据端口的最高位(忙标志位)是不是为1,若为1说明12864还忙着,则等待nTimeOut加到0时退出循环

//nTimeOut要在这个while里面循环65535次才退出循环,原因是需要累加到溢出其值才会变成0,这样起到延时的作用;

//也就是查询忙标志位,如果不忙了就立即退出循环,执行下面的指令,忙的话我给你延时一段时间,你肯定也忙完了,我也退出循环.

CLR_EN //EN回到0电平(对液晶不操作的时候EN都应该回到低电平,防止错误数据的出入,加强抗干扰)

SET_INC //冗余操作,上面已经执行了SET_INC

SET_READ //冗余操作,上面已经执行了SET_READ

}

/**************************************

发送命令

输入变量:byCmd-发给12864的指令代码

***************************************/

void v_Lcd12864SendCmd_f( unsigned char byCmd ) //发送命令

{

v_Lcd12864CheckBusy_f() ;//确认液晶不在忙状态

SET_INC //io_LCD12864_RS = 0 指向指令寄存器

SET_WRITE //io_LCD12864_RW = 0 当前操作变成写操作

CLR_EN //io_LCD12864_EN = 0 EN先变低电平

io_LCD12864_DATAPORT = byCmd ;//将指令代码放到液晶端口上

_nop_();//延时等待端口数据稳定

_nop_();//延时等待端口数据稳定

SET_EN //io_LCD12864_EN = 1 上升沿跳变,端口的数据(指令代码)被12864读入到数据寄存器

_nop_();//延时等待12864读完

_nop_();//延时等待12864读完

CLR_EN//EN回到0电平

SET_READ//回到读状态(平时都应该在读状态,防止误写)

SET_INC//冗余操作

}

/**************************************

发送数据

输入变量:byData-发给12864的数据代码

***************************************/

void v_Lcd12864SendData_f( unsigned char byData ) //发送数据

{

v_Lcd12864CheckBusy_f() ;//确认液晶不在忙状态

SET_DATA //io_LCD12864_RS = 1 指向液晶的数据寄存器

SET_WRITE //io_LCD12864_RW = 0 当前操作变成写操作

CLR_EN //io_LCD12864_EN = 0 EN先变低电平

io_LCD12864_DATAPORT = byData ;//将数据代码放到液晶端口上

_nop_();//延时等待端口数据稳定

_nop_();//同上

SET_EN//io_LCD12864_EN = 1 上升沿跳变,端口的数据(数据代码)被12864读入到数据寄存器

_nop_();//延时等待12864读完

_nop_();//同上

CLR_EN//EN回到0电平

SET_READ//回到读状态

SET_INC//冗余操作

}

单片机g代码解析的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于怎么读懂单片机代码、单片机g代码解析的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/1996.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载