矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: 海阔天空9

请高人详解单片机晶体振荡电路的作用。

[复制链接]
     
发表于 2024-1-18 08:56:29 | 显示全部楼层
本帖最后由 metellan 于 2024-1-18 10:41 编辑
海阔天空9 发表于 2024-1-17 18:07
我不懂什么代码?就是用8位拨码开关设置p1口的0,1电平,再用按键对P3-2(6脚)加一个正脉冲,P1口的8位 ...


只好说:2051不是6116,也不是27C。

你这种玩法,还是不要碰它为好。

学习使用单片机,首先要搞懂记熟它的指令集。你这种对规格书抱着深仇大恨的心态,连这第一步都走不出去。


附当年学51的时候写的一个流水灯的汇编程序,是为做高位刹车灯的,有左/右流水、两侧交替闪烁等功能,每个功能都由IO口的输入低电平触发。可以看出编程思路和代码都很原始,但要求的功能毕竟是实现了。

;高位刹车灯
;LED驱动板  AT89C2051   晶振12M
;**********************************************************************************
        ORG 0000H          ;
        LJMP MAIN          ;
        ORG 030H           ;
   MAIN:MOV P1,#00H        ;
        MOV P3,#0FFH       ;
        JNB P3.3,ZU        ;
        JNB P3.4,YO        ;
        JNB P3.5,shan      ;
        AJMP MAIN          ;
     ZU:NOP                ;
        NOP                ;   
        JNB P3.4,ANQ       ;
        LCALL SHAND        ;
        LJMP ZUOL          ;
        RET                ;
     YO:NOP                ;
        NOP                ;
        JNB P3.3,ANQ       ;
        LCALL SHAND        ;
        LJMP YOUL          ;
        RET                ;
    ANQ:MOV P1,#00FH       ;  
        LCALL SHAND        ;
        LCALL SHAND        ;
        MOV P1,#0F0H       ;
        LCALL SHAND        ;
        LCALL SHAND        ;
        MOV P1,#00FH       ;  
        LCALL SHAND        ;
        LCALL SHAND        ;
        MOV P1,#0F0H       ;
        LCALL SHAND        ;
        LCALL SHAND        ;
        MOV P1,#00FH       ;  
        LCALL SHAND        ;
        LCALL SHAND        ;
        MOV P1,#0F0H       ;
        LCALL SHAND        ;
        LCALL SHAND        ;
        NOP                ;
        NOP                ;
        LJMP MAIN          ;
   SHANJMP ASSO          ;
        RET                ;
  DELAY:MOV R5,#100        ;
     O1:MOV R4,#250        ;
     O2JNZ R4,O2         ;
        DJNZ R5,O1         ;
        NOP                ;
        NOP                ;
        RET                ;
    BAK:AJMP MAIN          ;
   DELA:MOV R7,#100        ;
     Q1:MOV R6,#250        ;
     Q2JNZ R6,Q2         ;
        DJNZ R7,Q1         ;
        NOP                ;
        NOP                ;
        RET                ;
   
   ZUOL:JNB P3.4,BAK        ;
        MOV P1,#001H        ;
        LCALL DELAY         ;
        LCALL DELAY         ;
        MOV P1,#003H        ;
        LCALL DELAY         ;
        LCALL DELAY         ;
        MOV P1,#00EH        ;
        ACALL DELAY         ;
        ACALL DELAY         ;
        MOV P1,#01CH        ;
        ACALL DELAY         ;
        ACALL DELAY         ;
        MOV P1,#038H        ;
        ACALL DELAY         ;
        JNB P3.4,BAK        ;
        ACALL DELAY         ;
        MOV P1,#070H        ;
        ACALL DELAY         ;
        ACALL DELAY         ;
        MOV P1,#0E0H        ;
        ACALL DELAY         ;
        ACALL DELAY         ;
        MOV P1,#0C0H        ;
        ACALL DELAY         ;
        ACALL DELAY         ;
        MOV P1,#080H        ;
        ACALL DELAY         ;
        ACALL DELAY         ;
        MOV P1,#00H         ;
        ACALL DELAY         ;
        LJMP MAIN           ;
   BACK:AJMP MAIN          ;   
   YOUL:JNB P3.3,BACK      ;
        MOV P1,#080H       ;
        LCALL DELA         ;
        LCALL DELA         ;
        MOV P1,#0C0H       ;
        LCALL DELA         ;
        LCALL DELA         ;
        MOV P1,#0E0H       ;
        ACALL DELA         ;
        ACALL DELA         ;
        MOV P1,#070H       ;
        ACALL DELA         ;
        ACALL DELA         ;
        MOV P1,#038H       ;
        ACALL DELA         ;
        JNB P3.3,BACK      ;
        ACALL DELA         ;
        MOV P1,#01CH       ;
        ACALL DELA         ;
        ACALL DELA         ;
        MOV P1,#00EH       ;
        ACALL DELA         ;
        ACALL DELA         ;
        MOV P1,#003H       ;
        ACALL DELA         ;
        ACALL DELA         ;
        MOV P1,#001H       ;
        ACALL DELA         ;
        ACALL DELA         ;
        MOV P1,#00H        ;
        ACALL DELA         ;
        LJMP MAIN          ;
   
   ASSO:MOV P1,#0FFH       ;
        ACALL SHAND        ;
        ACALL SHAND        ;
        MOV P1,#00H        ;
        ACALL SHAND        ;
        ACALL SHAND        ;
        LJMP MAIN          ;
  SHAND:MOV R1,#100        ;
     S1:MOV R0,#250        ;
     S2JNZ R0,S2         ;
        DJNZ R1,S1         ;
        NOP                ;
        NOP                ;
        RET                ;
        END   
回复 支持 反对

使用道具 举报

发表于 2024-1-18 09:52:13 | 显示全部楼层
海阔天空9 发表于 2024-1-17 10:46
我按网友提供的12个字节的程序输入的呀,不叫程序吗?我还真不知道什么叫程序,程序,字节,数据

这是12步,而不是12字节,12个字节的程序根本就没法流水。
网友提供的是什么样的原样复制出来看看吧;另外,我好像看不懂这个流水是怎么流水的
正常使用单片机,是不可能靠复位来跳过后面的空白字节重新开始循环的,完整的单片机程序是自动跳转不需要手动复位的。
单片机烧写进去后,如果真的是在校验状态下还好,如果是运行程序的工作状态下,输出的肯定和输入的不一样,甚至是完全没有输出。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-1-18 12:10:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2024-1-18 22:27:10 | 显示全部楼层
海阔天空9 发表于 2024-1-18 12:10
8个P1口各接一路LED,顺序点亮和顺序写灭,不叫“流水灯”吗?我这个“手动编程”可以实现。12个地址逐 ...

P1口只有一组,所以不能说是8个P1口,而是8位的。
你那只是验证写入的数据,如果让单片机运行起来,结果就是意料之外的,根本不可能流水。
你要解释,我就简单的说一下吧,如果你在单片机的0000H地址写入02H,0001H写入04H,0002H写入08H,表面看起来好像也是流水灯(轮流输出高电平),但是当程序运行的时候,因为写入的是程序而不是数据,单片机的地址指针直接跳到0408H的地方去执行程序(第一个的02H是 LJMP 跳转指令的机器码,后面紧跟的两个字节是跳转地址),而不是让P1口输出数据;而要让P1口输出数据,可以按需要选择对应的指令,比如“MOV P1,#02H ;”,就是让16进制数据02送到P1口,对应的机器码是“75H、90H、02H”三个字节,所以,把单片机当着数据存储器来用并不合适。
回复 支持 反对

使用道具 举报

发表于 2024-1-18 23:21:05 | 显示全部楼层
其实楼主暂时还是不适合玩单片机的,还是先玩玩数字电路,用纯数字电路取50Hz做频率源做一个时钟,再改用32768晶振,感受一下数字电路的魅力。再用27系列的存储器做一个念佛机,然后才玩单片机
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-1-19 07:29:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-1-19 07:36:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2024-1-19 08:17:15 | 显示全部楼层
题目真大!看了半天回帖,也没有弄明白。说到作用,大概晶振提供的是一种规范或坐标吧,也就是用电脉冲前后沿为时间轴,把具体需要处理的数字变成一个个电脉冲讯号,就像早期的计算机打孔纸一样,把程序输入到逻辑处理中心按部就班的来处理,开始演算公式,如果没有晶振,就乱了。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-1-19 09:22:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2024-1-19 20:31:51 | 显示全部楼层
海阔天空9 发表于 2024-1-19 07:29
P1口只有一组,所以不能说是8个P1口,而是8位的。-----------明白了!我说错了。P1口有8个位置。
你那 ...

“明白了!我说错了。P1口有8个位置。”-----P1口是8个位,而不是“P1口有8个位置”,一个字节8个位。
“根本不可能流水??P1口接的8个LED确实按写入地址的顺序亮起来了呀?这不叫“流水”吗?”-----你这只是读出(校验)写入单片机的内容,而不是单片机正常运行的内容。
“02H,04H,08H是什么?”-----这就是让你看书却坚决不看的后果,后缀“H”代表16进制的数值,C语言用0x02等表示,如果不加H,你就会把它当着十进制的2来看了。
“您这一段说的我还是不明白?变换地址不是“指令”?我理解变换地址就是依次输出不同地址里存入的数据,不对吗?(还是用存储器的思维?)”-----简单运用的单片机,没有专门保存数据的地方(其实是有的,RAM就是,但是断电就丢失了),所有的程序以及数据,都是一起写入单片机中的,至于是程序还是数据,是由程序来决定的,如果程序指针错误,跑到正好是存放数据的地方去运行,就会发生各种错误,就像你的流水灯无法运行一样。变换地址读出的数据,只能说是读出单片机里面的“程序”进行校验写入是否对错,而不可能是单片机运行的输出结果,所以,你写入的12个字节,在校验时是和写入时是一样的,但是在最小系统上的运行结果是不可预料的(看内容而定)。至于后面的代码,则是单片机的汇编语言,用于对单片机程序的编写,而现在则是被跟容易理解阅读的C语言代替了。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-1-19 20:42:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2024-1-19 20:48:43 | 显示全部楼层
海阔天空9 发表于 2024-1-19 20:42
你写入的12个字节,在校验时是和写入时是一样的,但是在最小系统上的运行结果是不可预料的----根本原因是 ...

你的理解能力有严重问题,再次说明,你写入的自认为是流水灯程序的内容,根本就不是单片机的程序,所以单片机是不会按你的意愿进行相应的输出,单片机不是存储器,不是写入什么内容就会输出什么内容,至于你认为读出正确的,是因为处在校验状态而不是运行状态。我前面就说过了,一个流水灯的程序,12个字节远远不够。
回复 支持 反对

使用道具 举报

发表于 2024-1-19 20:54:15 | 显示全部楼层
海阔天空9 发表于 2024-1-19 20:42
你写入的12个字节,在校验时是和写入时是一样的,但是在最小系统上的运行结果是不可预料的----根本原因是 ...

打个比方,你用标准普通话对天猫精灵说“打开音乐”,它会遵照执行,因为这是在它的理解范围内并且可以执行得了的;但你要是用晦涩难懂的方言说“打开音乐”,它就会理解错误或者不作回应,而单片机也是一样,你写入正确的单片机程序,它就可以正确运行,但你要是写入杂七杂八自认为正确,但却是单片机理解不了的内容,很抱歉,单片机是会胡乱运行的。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-1-19 20:54:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-1-19 20:57:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-27 03:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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