|
(編寫帖子額的時候不太熟練,倒置部分結(jié)構(gòu)亂了 ) 一:解決問題思路
所有單片機(jī),想要達(dá)到led閃爍,都需要延遲函數(shù).延遲分為硬件延遲和軟件延遲兩種.硬件延遲涉及到定時器的概念,是后面要講的內(nèi)容,這里采用軟件延遲的方法.
1 軟件延遲(兩種實現(xiàn)方式)
1.1 用指令實現(xiàn)延時
CC2530的每個指令是一個時鐘,而標(biāo)準(zhǔn)的8051的指令周期是12個時鐘。若選用32MHZ的時鐘頻率,那么時鐘周期是1/32 us,一個指令也就是1/32us. 而CC2530系統(tǒng)上電默認(rèn)是16MHZ的內(nèi)部RC振蕩器 - ZStack中大多使用的延時函數(shù)如下:
- void Delay_us(uint16 value){
- while (value--)
- {
- asm(“NOP”); //一個指令周期占用一個時鐘周期
- asm(“NOP”);
- asm(“NOP”);
- }
- }
- void Delay_ms(uint16 value)
- {
- while(1)
- Delay_us(1000);
- }
復(fù)制代碼 1.2 for循環(huán)實現(xiàn)延時 (僅做參考,主要用于講解
- void delay_us(int n)
- {
- while(n--)
- {
- unsigned char a,b;
- for(a=173;a>0;a--)
- for(b=143;b>0;b--) ;
- }
-
- }
復(fù)制代碼
2. 配置寄存器
2.1配置寄存器順序
1.PxSEL //端口功能選擇 0為通用I/0 1為外設(shè)
2.PxDIR //端口方向選擇 0為輸入 1為輸出 LED不需要配置 PxINP寄存器
2.2 PXSEL 和PXDIR詳細(xì)配置參數(shù) (這里沒辦法粘貼圖片,就直接給連接可以自行跳轉(zhuǎn)
2-2 CC2530的通用IO及相關(guān)寄存器 - 夏日清涼~ - 博客園 (cnblogs.com)
3.demo
我的CC2530 led1和led2 是P1_0和P1_1; 而且是低電平點亮 這個根據(jù)實際情況近些年編寫</div><div><div class="blockcode">
- #include <ioCC2530.h>
- #define led1(x) P1_0=~x
- #define led2(x) P1_1=~x
- void Delay_us(uint16 value){
- while (value--)
- {
- asm(“NOP”); //一個指令周期占用一個時鐘周期
- asm(“NOP”);
- asm(“NOP”);
- }
- }
- void Delay_ms(uint16 value)
- {
- while(1)
- Delay_us(1000);
- }
-
- void main()
- {
- P1SEL &=~0x07;
- P1DIR |= 0x03;
-
-
-
-
- while(1)
- {
- led2(1);
- led1(0);
- Delay_ms(1000);
- led1(1);
- led2(0);
- Delay_ms(1000);
- }
-
- }
復(fù)制代碼
文章參考:CC2530單片機(jī)精確延時的時間分析-CSDN博客
十二、CC2530系統(tǒng)時鐘設(shè)置_通過配置時鐘頻率控制寄存器和時間頻率狀態(tài)寄存器實現(xiàn)cc2530使用外部32mhz晶-CSDN博客
|
評分
-
查看全部評分
|