51單片機學習day02

基于普中的stc89c52,

串口:

? ? ? ? 通訊接口,51單片機自帶UART(通用異步收發器),可實現窗口通訊。

硬件電路:

? ? ? ? 簡單雙向串口通信有兩根通信線(發送端TXD和接收端RXD),TXD和RXD需要交叉連接,單向數據傳輸時,可以接一根通信線,電平協議不一致,需要加電平轉換芯片。

電平標準:

? ? ? ? 電平標準是數據1和數據0的表達方式,是傳輸線纜中人為規定的電壓與數據的對應關系,串口常用的電平標準有三種:

? ? ? ? TTL電平:+5v表示1,0v表示0;

? ? ? ? RS232電平:-3~-15V表示1,+3~+15V表示0;

以上電平距離十多米以上傳輸信號就會錯亂;

? ? ? ? RS485電平:兩線壓差+2~+6V表示1,-2~-6V表示0;(差分信號)

RS485傳輸距離遠;

流控制,調整傳輸速率和接收速率不匹配的情況;

同步的帶時鐘線:SCL,SCLK

全雙工:兩根線,設備a和設備b可以同時發;

半雙工:一根線,利用同一根線收發;分時復用一根線

單工:只能單向傳輸;

51單片機里的UART:

????????

串口參數及時序圖:

? ? ? ?波特率:串口通信的速率(發送和接收各數據位的間隔時間)

? ? ? ? 檢驗位:用于數據驗證(奇偶校驗,)

? ? ? ? 停止位:用于數據幀間隔

? ? ? ? ?比特率:bit,傳送多少位;

串口模式圖:

配置ES,EA;

波特率計算:

-----------------------------------------------------

SCON = 0x40;//模式一,SM0=0,SM1=1;
?? ?PCON |= 0x80;//波特率
?? ?TMOD &= 0x0F;?? ??? ?//設置定時器模式
?? ?TMOD |= 0x20;?? ??? ?//設置定時器模式,八位自動重裝
?? ?TL1 = 0xF3;?? ??? ?//設置定時初值,和波特率有關
?? ?TH1 = 0xF3;?? ??? ??? ?//設置定時初值
?? ?ET1 = 0;?? ??? ?//禁止定時器1中斷
?? ?TR1 = 1;?? ??? ?//啟動定時器1

---------------------------------------------------------

以12MHZ的晶振為例(每過1微秒記一次數,)

定時器為0xF3(十進制為243),八位寄存器,每隔256溢出一次,與初始值相差13個數(每記13個數溢出一次),每隔13微秒溢出一次,TI的溢出率即為1/13=?0.07692307692307692307692307692308 MHZ

SMOD = 1:??

1/13=?0.07692307692307692307692307692308 MHZ? / 16 =4,807.6923076923076923076923076923 HZ

頻率沒有與晶振對應,所以會產生誤差;

誤差值為溢出率/波特率

0.07692307692307692307692307692308 / 4,807.6923076923076923076923076923

=1.6000000000000000000000000000001e-5

所以會產生0.16/100的誤差;

如果不選擇SMOD就先 / 2再 / 16;

串口相關寄存器:
????????

PCON(電源寄存器)前兩位與串口有關;

串口控制寄存器SCON和PCON:

配置目標:讓UART處于模式1工作狀態;(模式1:8位UART)

SCON = 0x40? //SM0:0;SM1:1;//模式一給二進制位:0100 0000;十六進制0x40;

PCON=0 /波特率配置;

------------------配置定時器

串口中定時器有自己的工作模式;

-----------------------------------------------------

SCON = 0x40;//模式一,SM0=0,SM1=1;
?? ?PCON |= 0x80;//波特率
?? ?TMOD &= 0x0F;?? ??? ?//設置定時器模式
?? ?TMOD |= 0x20;?? ??? ?//設置定時器模式,八位自動重裝
?? ?TL1 = 0xD0;?? ??? ?//設置定時初值,和波特率有關
?? ?TH1 = 0xFF;?? ??? ??? ?//設置定時初值
?? ?ET1 = 0;?? ??? ?//禁止定時器1中斷
?? ?TR1 = 1;?? ??? ?//啟動定時器1

---------------------------------------------------------

定時器和波特率stc配置樣例:

發送速率過快或者波特率過高都會產生誤差,可以采用低波特率和Delay延遲函數解決;

配置單片機收數據:

把REN置為1;

SCON = 0x50;//模式一,SM0=0,SM1=1;
?? ?PCON |= 0x80;//波特率
?? ?TMOD &= 0x0F;?? ??? ?//設置定時器模式
?? ?TMOD |= 0x20;?? ??? ?//設置定時器模式,八位自動重裝
?? ?TL1 = 0xD0;?? ??? ?//設置定時初值,和波特率有關
?? ?TH1 = 0xFF;?? ??? ??? ?//設置定時初值
?? ?ET1 = 0;?? ??? ?//禁止定時器1中斷
?? ?TR1 = 1;?? ??? ?//啟動定時器1

? ? ?EA = 1;//啟動中斷

? ?ES = 1;//啟動串口中斷;

中斷號:

void UART_Routine() interrupt 4? ? ? ?串口中斷號4

單片機是用同一個串口同時收發:所以在中斷函數里面用if判斷是接收中斷還是發送中斷;

一個函數不能再主函數和中斷函數中同時調用;

數據顯示模式:

HEX模式/二進制模式:以原始數據形式顯示;

文本模式/字符模式:以原始數據編碼后的數據顯示;

數據在文本模式時需要用ascll碼進行編碼在進行發送,可以傳輸的數據為0-255;(對應ascll碼表)

在實際傳輸過程中只傳輸二進制碼,只是顯示方式不一樣;

LED點陣屏:

? ? ? ? ?

本次使用的開發板只是一個8*8單色點陣;

顯示原理:

類似于數碼管,點陣屏只能掃描法顯示不同內容;

74HC595(可控制多位輸出):

QA--QH輸出端;

OE上加橫線說明低電平有效;OE使能接口(只有OE低電平芯片才工作);

RCLK:寄存器時鐘;

SRCLR:串行清零端? (直接接VCC代表不清空)

SRCLK:串行時鐘

SER:串行數據

--------------------------------------------

SER:串行數據:
? ? ? ??

數據分串行(一個一個在時鐘的激勵下出去)和并行(同時輸出)

串行數據接移位寄存器:把數據寫入高電平,控制時鐘上升沿移位(SERCLK),把SER清零,再給一個上升沿移位,,數據會一個一個向下移動;

RCLK會把移位寄存器的數據移位到輸出端(給RCLK一個上升沿)

以上是一片74HC595的工作方式;

QH` 多片級聯:

當移位寄存器滿的時候,SER繼續給1,輸出端會輸出到QH`給下一個移位寄存器;

每一片移位寄存器的時鐘是連接到一起的;當所有的移位寄存器滿的時候,數據移位完成是,上升沿鎖存(RCLK)會控制所有的移位寄存器輸出到輸出緩沖區;

單片機低電平強,高電平弱,如直接接芯片IO口會影響亮度;如果用三極管放大電路進行放大輸出電平,IO口作為控制電路,這樣緩沖后可以增加導通效果;

同一列輸出和同一行輸出燈亮度不一樣;(恒壓輸出和恒流輸出);

c51中的sfr、sbit:(在頭文件中可以找到)

sfr:特殊功能寄存器聲明;

例如:sfr P0 =0x80;? 聲明P0口寄存器,物理地址為0x80;

sbit:特殊位聲明

例如:sbit P0_1 = 0x81;? 或 sbit P0_1 = P0^1; /聲明P0寄存器的第一位;

可位尋址/不可位尋址:

單片機系統中,操作任意寄存器或者某一位數據時,必須給出其物理地址,又因為一個寄存器里有八位,所以位的數量是寄存器數量的8倍。單片機無法對所有位進行編碼,故每8位寄存器中,只有一個是可以尋址的,對不可尋址的寄存器,若只操作其中一位而不影響其他位,可以用“&=”,“|=”,“^=”的方法進行位操作;

-----------------------------

sbit RCK = P3^5;? ? ? //把P3的第五位命名為RCLK,,等同于操作P35

采用不同的命名方法:來保證避免命名沖突;

高位優先推入QH:

SER第一個給最高位值;把byte的最高位取出賦值給SER;

單片機初始化后所有的IO口都是高電平:所以要操作sck要把先賦值為0;

上升沿移位由0置1后SER給的高位1被移入下一層,移動結束后,再次置0,為下一次移動準備;

重復移位:

用for循環解決:

上升沿移位完成后,進行上升沿鎖存,把八位數據送到IO口上;

點陣屏代碼:

當Column = 0 ,P07 = 0.其他輸出1;

代碼改進:

段選? 位選? ?段選? 位選?段選? 位選 ? ? ? ?//點陣屏重復執行,會把位選的數據影響到段選數據;所以要消影;

消除殘影,所以加上延時 位清零

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HelixToolKit的模型旋轉操作

前面加載了模型以后,鼠標拖動和縮放比較好操作;但是旋轉似乎沒有, 操作了一陣,也不是沒有,應該是還不熟悉; 旋轉的指示器在右下角,現在U面看到正面, 想看一下模型的背面&#xff0…

【Java項目介紹和界面搭建】拼圖小游戲——添加圖片

🍬 博主介紹👨?🎓 博主介紹:大家好,我是 hacker-routing ,很高興認識大家~ ?主攻領域:【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】 🎉點贊?評論?收藏 …

扼殺網絡中的環路:STP、RSTP、MSTP

目錄 前言: 一、STP(Spanning Tree Protocol) 1.1 STP功能 1.2 STP應用 二、RSTP(Rapid Spanning Tree Protocol) 2.1 RSTP功能 2.2 RSTP應用 三、MSTP(Multiple Spanning Tree Protocol&#xff0…

Angular 由一個bug說起之四:jsonEditor使用不當造成的bug

一:問題 項目中使用了一個JSON第三方庫: GitHub - josdejong/jsoneditor: A web-based tool to view, edit, format, and validate JSON 當用戶編輯JSON格式的數據,查找替換時: 用戶的期望結果是:$$ 被替換為$$_text&a…

[物聯網] OneNet 多協議TCP透傳

[物聯網] OneNet 多協議TCP透傳 STM32物聯網–ONENET云平臺的多協議接入產品創建 : https://blog.csdn.net/qq_44942724/article/details/134492924 Onenet tcp 透傳 : https://blog.csdn.net/flyme2010/article/details/107086001 tcp服務端測試工具 : http://tcp.xnkiot.com/…

zephyr學習

zephyr內核對象學習 定時器 類似linux的定時器, 可以分別設置第一次到期時間和后續的周期觸發時間, 可以注冊到期回調和停止回調 還有一個計數狀態,用于標記timer到期了多少次 duration:設定timer第一次到期的時間。 period: …

SpringBoot3.2.0整合MyBatis-plus的相關問題及處理方法

SpringBoot3.2.0整合MyBatis-plus的相關問題 文章目錄 SpringBoot3.2.0整合MyBatis-plus的相關問題1. build.gradle2. mybatis-plus整合問題1. 錯誤描述2. 問題分析及解決1. 原因分析2. 解決方式 Springboot3.2.0 GA版發布于 2023-11-24 環境:SpringBoot3.2.0Gradle…

【蛀牙】日常生活如何正確護理牙齒?刷牙、洗牙、補牙

程序員生活指南之 【蛀牙】日常生活如何正確護理牙齒?刷牙、洗牙、補牙 文章目錄 一、日常如何清洗牙齒?——刷牙與洗牙1、牙齒污垢1.1 牙菌斑1.2 軟垢1.3 牙結石1.4 牙齦出血 2、如何刷牙2.1 關于時間2.2 各種工具2.3 巴氏刷牙法 二、定期進行洗牙3、如…

題目 1076: 內部收益率

題目描述: 在金融中,我們有時會用內部收益率IRR來評價項目的投資財務效益,它等于使得投資凈現值NPV等于0的貼現率。換句話說,給定項目的期數T、初始現金流CF0和項目各期的現金流CF1, CF2, ...,CFT,IRR是下面方程的解&…

RISC-V特權架構 - 特權模式與指令

RV32/64 特權架構 - 特權模式與指令 1 特權模式2 特權指令2.1 mret(從機器模式返回到先前的模式)2.2 sret(從監管模式返回到先前的模式)2.3 wfi(等待中斷)2.4 sfence.vma(內存屏障) …

SpringBoot+Vue+MySQL:裝修管理新架構探索

??計算機畢業編程指導師 ??個人介紹:自己非常喜歡研究技術問題!專業做Java、Python、微信小程序、安卓、大數據、爬蟲、Golang、大屏等實戰項目。 ??實戰項目:有源碼或者技術上的問題歡迎在評論區一起討論交流! ?? Java、…

FPGA開源項目分享——2D N-Body重力模擬器

?導語 今天繼續康奈爾大學FPGA 課程ECE 5760的典型案例分享——2D N-Body重力模擬器。 (更多其他案例請參考網站: Final Projects ECE 5760) 1. 項目概述 項目網址 Grav Sim 項目說明 該項目的目標是創建一個用DE1-SOC進行硬件加速的2…

Java面試技巧

一、面試前準備 復習基礎知識:深入理解Java核心概念,如JVM、JDK、JRE等。熟悉Java基本語法、面向對象編程、異常處理、集合類、IO流等。同時,對Java的新特性,如Lambda表達式、Stream API等也要有所了解。強化算法和數據結構&…

簡易內存池2 - 華為OD統一考試(C卷)

OD統一考試(C卷) 分值: 200分 題解: Java / Python / C 題目描述 請實現一個簡易內存池,根據請求命令完成內存分配和釋放。 內存池支持兩種操作命令,REQUEST和RELEASE,其格式為: REQUEST請求的內存大小 …

Redis 【1】—— 安裝 與 配置

Redis 【1】—— 安裝 與 配置 一、安裝 與 配置(一)使用 yum 安裝(二)創建符號鏈接1. 軟鏈接2. 相關指令 (三)修改配置文件(四)Redis 的啟停 一、安裝 與 配置 (一&…

Java的強引用、軟引用、弱引用和虛引用詳解。

Java的強引用、軟引用、弱引用和虛引用 1. 強引用2. 軟引用3. 弱引用4. 虛引用 總結 Java的強引用、軟引用、弱引用和虛引用可以用來標識GC時判斷對象是否達到回收的條件,下面結合Java代碼看看這四類引用吧。 1. 強引用 是最普通的引用方式,通過new關鍵…

外貿業務員沒客戶的7大原因+解決辦法!

業務員沒有客戶,就是無源之水,無本之木,這自然也就沒有業績。那些吃空餉的業務員,遲早會拖垮公司。所以不管是什么原因導致的業務員沒客戶,都要一一查驗清楚。七個業務員沒有客戶的原因,七種對策&#xff0…

華為數通方向HCIP-DataCom H12-821題庫(多選題:21-40)

第21題 管理員在配置 VRRP 時,下面哪些不是必須配置的? A.搶占模式 B.搶占延時 C.虛擬IP 地址 D.虛擬路由器的優先級 【參考答案】ABD 【答案解析】 VRRP的作用之一是提供一個虛擬的IP地址,用作默認網關,用來實現冗余和故障轉移。因此,配置虛擬IP地址是必須的。華為設備vr…

hcip交換

交換機功能 無限的傳輸距離——識別,重寫電信號(幀)保證信息完整徹底解決了沖突二層單播——MAC地址表提高端口密度 單播地址:MAC地址第一個字節第8位為0 組播地址:MAC地址第一個字節第8位為1 廣播地址:全1…

滲透測試靶場環境搭建

1.DVWA靶場 DVWA(Damn Vulnerable Web Application)是一個用來進行安全脆弱性鑒定的PHP/MySQL Web應用,包含了OWASP TOP10的所有攻擊漏洞的練習環境,旨在為安全專業人員測試自己的專業技能和工具提供合法的環境,同時…