物联网控制技术 知识点总结 第三章 汇编语言 第四章 C51语言

51单片机的编程语言

编程语言的应用主要出现在综合应用题使用编程语言设计算法,多结合实验实例,练习编程能力,小编觉得不用纠结语言。

汇编语言

结合寻址方式理解汇编语言指令

51单片机的寻址方式

结合51单片机的体系结构来理解不同的寻址方式

立即寻址

操作数包含在指令代码中,称为立即数,用"#"表示。

寻址空间:程序存储器

masm 复制代码
MOV A, #30H 
直接寻址

直接使用数所在的单元的地址找到操作数。

寻址空间:片内RAM低128字节、SFR

masm 复制代码
MOV A, 00H 
寄存器寻址

对工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中的数进行操作。

寻址空间:工作寄存器R0~R7, A, B, DPTR

masm 复制代码
MOV A, Rn
寄存器间接寻址

将寄存器中存储的地址处的数据取出。"@"间址提示符。

寻址空间:

片内RAM: @R0, @R1, SP

片外RAM: @R0, @R1, @DPTR

asm 复制代码
MOV A, @R0
变址寻址

常用于访问存放在ROM单元中的数据表格,实现查表操作。

ROM:@A+PC, @A+DPTR

asm 复制代码
MOVC A, @A+DPTR
相对寻址

将PC中的当前内容(基地址)与指令第二字节给出的数(偏移量)相加,结果作为跳转指令的转移地址。

寻址空间:ROM256字节范围内:PC+偏移量

asm 复制代码
JC 23H ;若C=1则跳转至 当前PC基地址+23
位寻址

对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式。

寻址空间:片内RAM的位寻址区(20H~2FH字节地址)某些可位寻址的专用寄存器SFR

asm 复制代码
MOV C, 30H
SETB 3DH

C51语言

C51语言,使用C51语言写中断

中断服务函数

函数类型 函数名 (形式参数表)[interrupt n][using n]

  1. 中断函数没有返回值
  2. 中断函数不能进行参数传递
  3. 任何情况下都不能直接调用中断函数
  4. 如果在中断函数中再调用其他函数,则被调用的函数所使用的寄存器区必须和中断函数使用的寄存器区不同

中断初始化程序:选择外部中断的触发方式、开中断、设置中断优先级

中断服务程序

控制8只LED交替闪烁

c 复制代码
#include <reg51.h>
//定义延时函数Delay(),i时形式参数,不能赋初值
void Delay(unsigned int j){
	unsigned int j;
	for(;i>0;i--)
		for(j=0;j<333;j++)
			{;}		//空函数
}
//主函数
void main(){
	EA=1;		//总中断允许
	EX0=1;		//外部中断0中断允许
	IT0=1;		//选择外部中断0为跳沿触发方式
	while(1){	//循环
		P1=0;	//P1口的8至LED全亮
	}
}
void int0()interrupt 0 using 0{
	EX0=0;		//禁止外部中断0中断
	P1=0x0f;	//低4位LED灭,高4位LED亮
	Delay(800);	//延时800ms
	P1=0xf0;	//高4位LED灭,低4位LED亮
	Delay(800);	//延时800ms
	EX0=1;		//中断返回前,打开外部中断0中断
}

定时器0方式1中断

c 复制代码
#include <reg51.h>
char i=100;		//给变量i赋初值
void main(){
	TMOD=0x01;	//设置定时器T0为方式1
	TH0=0xee;	//向TH0写入初值的高8位
	TL0=0x00;	//向TL0写入初值的低8位
	P1=0x00;	//P1口8只LED点亮
	EA=1;		//总中断允许
	ET0=1;		//定时器T0中断允许
	TR0=1;		//启动定时器T0
	while(1);	//循环
	{;}
}
//定时器T0中断服务程序
void T0_int(void) interrupt 1{
	TH0=0xee;	//给T0装入16位初值,计数4608后,T0溢出
	TL0=0x00;
	i--;		//循环次数减1
	if(i<=0){
		P1=~P1;	//P1口按位取反
		i=100;	//重新设置循环次数
	}
}

串行口方式0

c 复制代码
#include <reg51.h>
#include <stdio.h>
sbit P10=0x90;
Xdata char nIndex;
Delay();
main(){
	SCON=0x00;		//串行口初始化为方式0
	ES=1;
	EA=1;			//全局中断允许
	nIndex=1;
	SBUF=nIndex;
	P10=0;
	while(1){;}
}
void Serial_Port()interrupt 4 using 0{
	if(TI==1){
		P10=1;
		Delay();
		P10=1;
		nIndex<<=1;
		if(nIndex==0) nIndex=1;
		SBUF=nIndex;
	}
	TI=0;
	RI=0;
}
Delay(){
	int nCounter;
	for(nCounter=0;nCounter<128;nCounter++);
}
相关推荐
aiprtem6 小时前
LVGL + ESP-Brookesia 在Windows下的编译和运行
windows·物联网
御控工业物联网13 小时前
跨区域泵房集群物联网统一管理平台建设
物联网·智慧水务·跨区域泵房管理·泵房物联网·泵房远程
sx24369416 小时前
嵌入式学习之硬件——51单片机 1.0
51单片机
明月看潮生1 天前
编程与数学 03-002 计算机网络 18_物联网与网络
物联网·计算机网络·青少年编程·编程与数学
一梦浮华1 天前
自学嵌入式 day40 51单片机
单片机·嵌入式硬件·51单片机
星环科技TDH社区版1 天前
AI Agent 的 10 种应用场景:物联网、RAG 与灾难响应
人工智能·物联网
玄酒2 天前
51单片机入门:模块化编程
单片机·嵌入式硬件·51单片机
董技叔软件开发公司2 天前
浅谈物联网嵌入式程序开发源码技术方案
物联网·软件需求·web app
Ms_lan2 天前
邢台市某区人民医院智慧康养平台建设项目案例研究
大数据·人工智能·物联网·蓝牙网关·桂花网
程序员编程指南2 天前
Qt 与物联网(IoT)开发
c语言·开发语言·c++·qt·物联网