单片机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站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-18个人怎么建网站,个人建网站步骤
- 05-18品牌推广与传播方案,品牌推广与传播方案怎么写
- 05-18怎么做网上销售,怎么样做网销
- 05-18贴吧友情链接在哪,手机贴吧怎么看友情贴吧
- 05-18百度广告推广怎么做,如何做百度广告推广
- 05-18百度竞价怎么开户,百度竞价开户流程
- 05-18痘痘如何去除效果好,痘痘应该怎么去除
- 05-17品牌营销策划方案怎么做,品牌营销策划方案怎么做好
- 05-17怎么创建网址,怎么创建网址聊天
- 05-17怎么做推广,新开店铺怎么做推广
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接