首页 > 其他分享 >单片机

单片机

时间:2022-12-23 18:00:20浏览次数:42  
标签:void 单片机 寻址 --------------------------------------------------------------------


      单片机就是一个小的计算机,不过他没有计算机那么好,方便的输入输出设备,计算机的输入设备就是鼠标,键盘等,方便的很,输出设备就是显示器,将输出非常清晰的显示在屏幕上。但是单片机的输入输出都是他的引脚,需要通过编程控制。

       单片机和PC机相同的地方就是都有CPU(我把单片机的微控制器核也叫CPU),内存(单片机的ROM,RAM,FLASH等),时钟系统,中断系统,定时器等等。

      一, 单片机最小系统就是单片机能够运行起来的必要条件:


1.电源 2.晶振 3.复位电路



   二,一些重要概念



设置单片机内部的寄存器和端口引脚以便输出高低电平控制其他(连接在单片机上)器件而已。



1:配置时钟,2:配置IO口,3:配置复位方式,看门狗设置等等



       次要的是:中断(外部,定时器,串口),串口,ADC,XRAM读写,内部FLASH等。   



    3. 1个机器周期 =12个时钟周期(晶振的振荡周期)   



    4. while(1);让单片机一直工作,等待中断!防止程序跑飞等。



7种寻址方式:
1.立即寻址 MOV A,#01H
2.直接寻址 MOV A,20H
3.寄存器寻址 MOV A,R3(A,B,Cy,DPTR)




4.寄存器间接寻址 MOVA,@R0  R1
5.变址寻址 MOVC  A, @A+DPTR
6.相对寻址 SJMP   rel; (PC)←(PC) + 2(指令长度) +  rel
7.位寻址 位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作。
MOV 00h,C,MOV  20H.0, C  ,PSW.6



 



     6. XRAM(分内外)读写 



      1> XBYTE[address]=data   写数据
         data=XBYTE[address]   读数据;



2>char xdata *mydat;
......
mydat=(char xdata*)0x0030;
*mydat=31;
3>汇编方式
mov dptr,#1000h
mov a,#55h
movx @dptr,a
7.  读端口信号是必须先向端口写“1”,然后再读,这就是单片机口信号的准双向的含义。切记!
8.  模拟输入或数字I/O,推挽(强)或漏极开路输出(IO,inout)



 



9. 一些寄存器默认设置即可,配置了可能会有警告。usb clock.clksel=1  10. Keil C 里面Lib库文件的生成与调用,可以自己做lib。



ram高128位只能间接寻址。idata,一些人可能没有用到idata,发现data不够用。



12 1s=1000ms=1000000us=1000000000ns.



x M晶振定时 y ms: TH1 = (65536 - (x/12)*y*1000) / 256;     TL1 = (65536 - (x/12)*y*1000) % 256;16位的哦,亲!



假设C8051F020单片机的晶振是22114800Hz,测每秒计22114800个数 经过12分频后,每秒计22114800÷12=1842900个数,如果设置计数器初值是 0xfe90(即十进制65165),则需要计的数的个数为65535-65165=360,那么定时器的 时间为(360÷1842900)(S)≈0.195ms,即0.2ms。



#define uchar unsigned char



#define uint  unsigned int



#define ulong unsigned long #define bool  bit



 



#include<C8051F330.h>



#define uchar unsigned char



#define uint unsigned int



#define ulong unsigned long //引脚定义



sbit In1= P0^3; sbit In2= P0^7; sbit In3= P1^3; sbit In4= P1^7; sbit Out1= P0^3; sbit Out2= P0^7; sbit Out3= P1^3; sbit Out4= P1^7;



//----------------------------------------------------------------------------- //功能:延时 //入口参数:yc //出口参数:无 //-----------------------------------------------------------------------------



void delay(uint time)



{



  while(--time);



}



//----------------------------------------------------------------------------- //功能:单片机C8051F330初始化 //入口参数:无 //出口参数:无 //-----------------------------------------------------------------------------



void Mcu_Init(void) { 



  PCA0MD&=~0x40;                 //禁止内部看门狗  



  OSCICN = 0x83;                 //内部振荡控制寄存器,使能H-F,八分频  



OSCICL = 0x00;                 //期望输出频率也是24.5MHz



  CLKSEL = 0x00;                  //系统时钟取自内部高频振荡器  



RSTSRC = 0x04;                 //检测到时钟丢失时允许系统复位



}



 



 



//----------------------------------------------------------------------------- //功能:MCU I/O口配置 //入口参数:无 //出口参数:无 //-----------------------------------------------------------------------------



 



void PORT_Init (void) {    



P0MDOUT  = 0x88;                         //P0.3,P0.7推挽输出   



P1MDOUT  = 0x88;                  //P1.3,P1.7推挽输出   



XBR0     = 0x00;  



  XBR1     = 0x40;                  //使能交叉开关和弱上拉 }



//----------------------------------------------------------------------------- // 功能:所有设备初始化 //----------------------------------------------------------------------------- // 入口参数:无 // 出口参数:无 //-----------------------------------------------------------------------------



 



void Init_Device (void) {   



Mcu_Init();   



PORT_Init();



} void main() {



     Init_Device();     



delay(10);          



     while(1){            }



 



}

标签:void,单片机,寻址,--------------------------------------------------------------------
From: https://blog.51cto.com/u_15045304/5966120

相关文章