ulcon0 設定資料格式
ucon0 設定接收傳送模式(輪詢)暫停訊號,回環,時鐘源
ufcon0
umcon0
ubrdiv0 設定波特率1
udivslot0 設定波特率2
utrstat0 狀態暫存器 bit[1] bit[0]
utxh0 傳送緩衝暫存器
urxh0 接民緩衝暫存器
串列埠 tpad pc
傳送 接收(顯示在螢幕上)
接收 傳送(鍵盤)
#ifndef __uart_h__
#define __uart_h__
#define gpa0con (*((volatile unsinged int*)
0xe0200000))
#define gpa0pud (*((volatile unsinged int*)
0xe0200008))
#define ulcon0 (*((volatile unsinged int*)
0xe2900000))
#define ucon0 (*((volatile unsinged int*)
0xe2900004))
#define ufcon0 (*((volatile unsinged int*)
0xe2900008))
#define umcon0 (*((volatile unsinged int*)
0xe290000c))
#define utrstat0 (*((volatile unsinged int*)
0xe2900010))
#define utxh0 (*((volatile unsinged int*)
0xe2900020))
#define urxh0 (*((volatile unsinged int*)
0xe2900004))
#define ubrdiv0 (*((volatile unsinged int*)
0xe2900028))
#define udivsl0t0 (*((volatile unsinged int*)
0xe290002c))
//宣告函式原型
extern void uart0_init(void);
extern void uart0_putc(char c);
extern void uart0_puts(const char *str);
extern char uart0_getc(void);
#endif __uart_h__
uart.m
#include "uart.h"
void uart0_init(void)
char uart0_getc(void)
}//2,接收字元,讀urxh0
return (urxh0 & 0xff);
}void uart0_putc(char c)
//傳送字元
utxh0 = c;
}void uart0_puts(const char *str)
while(*str)//
}
main.c
#include "uart.h"
void main(void)
}
思考:如何獲取字串?
在標頭檔案中增加宣告
extern
void uart0_gets(char buf,int len);
uart.m檔案
void uart0_gets(char buf,int len)
buf[i] = 0;//給字串乙個結束符號『\0』,因為『\0』的assic碼為0
}
main.c
#include "uart.h"
#define int buf_len = 10;
#define char buf[buf_len];
void main(void)
}
如何實現輸入乙個字元,顯示乙個字元?修改uart.m中的uart0_gets函式:
void uart0_gets(char buf,int len)
buf[i] = 0;//給字串乙個結束符號『\0』,因為『\0』的assic碼為0
}
main.c
#include "uart.h"
#define int buf_len = 10;
#define char buf[buf_len];
void main(void)
}
如何實現當輸入回車時,結束掉輸入?
void uart0_gets(char buf,int len)
}buf[i] = 0;//給字串乙個結束符號『\0』,因為『\0』的assic碼為0
}
如何實現按delete鍵時,刪除字元?
顯示端的處理:
1,游標先左移一次
2,輸出乙個空格鍵
3,游標再次左移一次
void uart0_gets(char buf,int len)
uart0_putc('\b');//輸出乙個刪除鍵(把游標左移一位)
uart0_putc(' ');//輸出乙個空格
uart0_putc('\b');//輸出乙個刪除鍵(把游標左移一位)
i--;
continue;
}uart0_putc( buf[i]);
if(buf[i] =='\r')//結束輸入
}buf[i] = 0;//給字串乙個結束符號『\0』,因為『\0』的assic碼為0
}
如何把上面的串列埠相關的函式與前面的led做成乙個shell?通過輸入shell命令來開啟或關閉led燈
要實現的功能為?
shell#led
//點燈
shell#ledoff
//關燈
led.h
//暫存器定義略
extern
void led_init(void);
extern
void led_on(void);
extern
void led_of(void);
led.c檔案
#include "led.h"
void led_init(void)
void led_on(void)
void led_off(void)
strcmp.h
#ifndef __strcmp_h__
#define __strcmp_h__
extern
int my_strcmp(const
char *str1,const
char *str2);
#endif
strcmp.c
#include "strcmp.h"
//兩個字串比較,相等返回0,不等,返回非0
my_strcmp(const char *str1,const char *str2)
str1++;
str2++;
}return (int(*str1 - *str2));
}
main.c
#include "uart.h"
#include "strcmp.h"
#include "led.h"
#define int buf_len = 10;
#define char buf[buf_len];
void main(void)
else}}
}
makefile檔案略
以上**存在乙個問題,如果有很多命令的時候,採用if 比較會變得非常繁瑣,增加命令很不方便。
採用結構體優化後的**,先定義標頭檔案,cmd.h檔案如下:
#ifndef __cmd_h__
#define __cmd_h__
typedef void (*cb_t)(void); //函式指標
typedef struct _cmd
cmd_t
//返回的是乙個結構體的位址,通過結構呼叫callback
extern
const cmd_t *find_cmd(const
char *name);
#endif
cmd.c
#include "cmd.h"
#include "led.h"
void cmd_ledon(void)
void cmd_ledoff(void)
const cmd_t cmd_tb1 =
, ,
};cmd_t *find_cmd(const
char *name)
國慶第五天
直接在寢室待了乙個上午 一 matlab 試了一下昨天安裝的matlab2010b發現檔案都打不開,報這個錯 undefined function or method uiopen for input arguments of type char 二 c 1.找到了個之前 裡的乙個問題 把本週開頭和...
集訓第五天
今天學習了乙個快速指數冪取餘的演算法。就拿一道題來說明 description 上初中的時候我們就學會了冪乘運算,可是我們卻不知道對於高階的冪乘,出結果的方法比較慢,那麼你有什麼更好的方法嗎?input 第1行,乙個整數n 1 n 1000 表示要計算的資料組數 第2 n 1行,每行兩個整數,第1個...
實習第五天
今天是第一周的最後一天,最近的專案中乙個類似qq聊天系統為最重要的任務,師傅交給 我的任務是用layer完成三個介面,新增好友介面 查詢好友介面以及傳送好友新增請求介面。先說明一下layer的基本頁面模板 lang en charset utf 8 傳送好友請求title rel styleshee...